Book Image

Test-Driven Development in Go

By : Adelina Simion
Book Image

Test-Driven Development in Go

By: Adelina Simion

Overview of this book

Experienced developers understand the importance of designing a comprehensive testing strategy to ensure efficient shipping and maintaining services in production. This book shows you how to utilize test-driven development (TDD), a widely adopted industry practice, for testing your Go apps at different levels. You’ll also explore challenges faced in testing concurrent code, and learn how to leverage generics and write fuzz tests. The book begins by teaching you how to use TDD to tackle various problems, from simple mathematical functions to web apps. You’ll then learn how to structure and run your unit tests using Go’s standard testing library, and explore two popular testing frameworks, Testify and Ginkgo. You’ll also implement test suites using table-driven testing, a popular Go technique. As you advance, you’ll write and run behavior-driven development (BDD) tests using Ginkgo and Godog. Finally, you’ll explore the tricky aspects of implementing and testing TDD in production, such as refactoring your code and testing microservices architecture with contract testing implemented with Pact. All these techniques will be demonstrated using an example REST API, as well as smaller bespoke code examples. By the end of this book, you’ll have learned how to design and implement a comprehensive testing strategy for your Go applications and microservices architecture.
Table of Contents (18 chapters)
1
Part 1: The Big Picture
6
Part 2: Integration and End-to-End Testing with TDD
11
Part 3: Advanced Testing Techniques

Testing multiple conditions

So far, we have covered how to structure and write tests. However, developers need to know what aspects of their code to test, as well as how to test them. Remember that the lower we go on the testing pyramid, the cheaper and faster the tests are to run. Therefore, it is important for developers to know how to exercise their code as low in their stack as possible. In this chapter, we’ll focus on covering edge cases as part of our developer testing strategy.

As discussed in Chapter 1, Getting to Grips with Test-Driven Development, automated tests should be based on the system requirements we implement. In general, system requirements will focus on the specification of the success scenarios and system functionality additions. Designing your testing strategy around these requirements serves the primary purpose of ensuring that your system satisfies its functional requirements.

A secondary purpose of your testing strategy should be to verify the...