Writing meaningful, self-documenting, behavior-oriented tests
Over the years I've come to realize that the one-fixture-per-class approach to unit testing just doesn't scale. As the amount of variations in state and interactions increases, that file starts becoming a big soup of "Should" methods that are increasingly difficult to traverse and find later on. Essentially, since every test is doing the first "A" in AAA (Arrange-Act-Assert) too, that means the context is also part of the test method.
You can only make a method so long and remain understandable
at a glance:
IfRepositoryContainsACustomerAndAddingANewOneWithSameIdButDifferentAliasThenThrowsInvalidArgumentException.
So, a while ago at Clarius
we started exploring
some of the concepts behind BDD (Behavior Driven
Development), Context/Specification, etc., while working on
an internal project.
...