在遵循我工作场所“架构师”传下来的错误做法并认为必须有更好的方法几年之后,我最近一直在阅读有关 TDD 和 DDD 的文章,我认为这些原则和实践非常适合我们编写的软件的复杂性。
但是,我见过的许多 TDD 示例都在域对象上调用方法,然后测试该对象的属性以确保行为正确执行。
另一方面,业内几位受人尊敬的人(Greg Young 最引人注目的是他关于 CQRS 的演讲)提倡通过移除所有“getter”来完全封装每个领域对象。
因此,我的问题是:如果禁止检索域对象的状态,如何测试域对象的功能?
我相信我缺少一些基本的东西,所以请随时称我为白痴并启发我 - 任何指导将不胜感激。
最佳答案
您所描述的是状态验证,其中您对域对象的状态进行断言。 TDD 有一个名为行为验证 的分支,它利用 Mock 对象。
行为验证允许您指定应调用哪些方法,如果需要,不调用哪些方法。
阅读 Martin Fowler 的这篇文章了解更多详情:Mocks Aren't Stubs .
关于c# - TDD、DDD 和封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1145634/