On our current project, we fell into several well-known pitfalls with our approach to functional testing -- siloed responsibility, unreliable automation, duplicated code. We had to rethink our approach.
We took advantage of our application's "Ports-and-Adaptors" architecture to write tests in a different way. Instead of working "outside-in", starting by driving the GUI, we now write functional tests that exercise the domain model in isolation.
To exercise more of the system, we translate the inputs and assertions in the tests from the level of the domain model into interactions at wider and wider scales. We can now run the same tests directly against the domain model, against service interfaces, and through the UI in end-to-end system tests.
We are having our cake and eating it too!
In this talk I'll describe the motivation and design of our functional test infrastructure, and discuss its benefits, challenges and surprises.
YOU MAY ALSO LIKE:
Having Our Cake and Eating It: Writing End-to-End Functional Tests That Can Run in Milliseconds with Nat Pryce!
Nat Pryce is a co-author of Growing Object-Oriented Software Guided by Tests. An early adopter of XP, he has written or contributed to several open source libraries and tools that support TDD and was one of the founding organizers of the London XP Day conference.