Wat je nu beschrijft komt redelijk overeen met hoe ik dingen aanpak. Hoewel ik meestal presenter-first werk om te zorgen dat ik mijn domein niet over-design. Maar dat is weer een hele andere discussie :-)
Wat bij opvalt is dat na verloop van tijd wel units opduiken in m’n tests. Ook als ik vanuit simpele beweringen over het domein begin. Vaak zijn ‘units’ groepjes klassen. En vaak komen ze redelijk overeen met ‘aggregates’ in mn domein. Meestal laat ik dat ook terugkomen in de manier waarop ik mijn tests indeel. Dat kost wat refactorwerk maar is meestal wel de moeite waard.
Persistance ignorance in je domein (en dus in je tests) is volgens mij bijna een voorwaarde om dit goed te doen.
Niet al mn tests slaan echter op mijn domein, ik test presentatie-logica en services ook. En niet alle tests in mn domein zijn van belang voor mensen die op user-story niveau naar kijken naar het domein. Ook probeer ik vaak nog wat ‘integratie tests’ te automatiseren, hier test ik de hele applicatie inclusief dal, services etc. Dit lukt me echter niet altijd even goed :-)
Meestal deel ik tests op op 2 manieren op.
Tests per component (domein, presentatie, dal, service), en soort test, op user story niveau heb ik meestal een hoop tests, die dingen horen als een soort spec’s te lezen. Verder heb ik een hoop tests die op lager niveau implementatiedetails testen, volgens mij kan hier DbC en code contracts ook goed helpen, maar hier wil ik nog meer mee spelen. En ik heb een zooi intergratie tests. Deze zijn in de praktijk echter vaak onleesbaar en lastig te onderhouden door de grote hoeveelheid setup ed.
Het BDD verhaal was voor zover ik me kan herinneren als volgt (correcties zijn welkom) Dan North heeft BDD bedacht als een manier om heel leesbaar story of acceptance tests op te schrijven. Volgens mij heeft ie jBehave hiervoor uitgevonden.
Hierna is David Astels in Ruby begonnen met rSpec. David Astels BDD lijkt echter veel meer op TDD, volgens mij wordt deze stijl BDD ook wel Context/Specification genoemd. En volgens vullen beide stijlen elkaar aardig aan. Volgens mij groeien ze ook langzaam naar elkaar toe.