Jus*_*tin 23 c# tdd getter encapsulation domain-driven-design
经过几年跟随我工作地点"建筑师"传下来的不良做法并认为必须有更好的方法,我最近一直在阅读TDD和DDD,我认为原则和实践将是一个非常适合我们编写的软件的复杂性.
但是,我见过的许多TDD示例都在域对象上调用一个方法,然后测试对象的属性以确保正确执行行为.
另一方面,业内几位受人尊敬的人(Greg Young最着名的是关于CQRS的讨论)主张通过删除所有"getters"来完全封装每个域对象.
因此,我的问题是:如果禁止检索域状态,如何测试域对象的功能?
我相信我缺少一些基本的东西,所以请随时称我为白痴并启发我 - 任何指导都将非常感谢.
Gav*_*ler 17
你所描述的是状态验证,其中你断言域对象的状态.TDD的一个分支称为行为验证,它利用了Mock对象.
行为验证允许您指定应调用哪些方法,如果需要,还可以指定不调用哪些方法.
请阅读Martin Fowler的这篇文章了解更多细节:Mocks不是Stubs.
好的,这个答案是一年太晚了;-)
但是,当您想要测试CQRS模型时,可以对触发的域事件进行断言,而不是对实体状态进行断言.
例如,如果您想测试是否调用:customer.Rename("Foo")会导致正确的行为.
而不是测试customer.Name是否等于"foo",而是测试在待处理事件存储中是否存在值为"Foo"的待处理CustomerRename事件.(根据实施情况,在您的uow或您的实体事件列表中)
| 归档时间: |
|
| 查看次数: |
2774 次 |
| 最近记录: |