c# - TDD、DDD 和封装

标签 c# tdd domain-driven-design encapsulation getter

在遵循我工作场所“架构师”传下来的错误做法并认为必须有更好的方法几年之后,我最近一直在阅读有关 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/

相关文章:

c# - 获取屏幕边缘和网页之间的距离

unit-testing - bool 函数的测试用例数

ruby-on-rails - rails : start writing tests late in development

domain-driven-design - 在领域驱动设计中实现限界上下文

c# - 配置系统初始化失败

c# - 使用单一设置在所有窗体中设置相同的背景

c# - 缓存在特定时间过期

java - 如何断言此单元测试中已引发 "N"异常?

c# - 在 Fluent NHibernate 中处理与值类型的一对多关系

c# - 这是哪种关系,一侧是一对一,另一侧是多对一