域模型(公开属性)

时间:2011-07-18 17:40:14

标签: c# .net oop domain-driven-design

因此,在构建我的域模型时,我试图务实地暴露出仅驱动行为所必需的内容,但我的单元测试要求我公开只在课堂内真正需要的公共getter。大家怎么处理这个?我的域名图层只能通过我的应用程序服务层访问,所以真的这么大的交易吗?我应该将它们内部化并让测试项目访问吗?

任何帮助都会很棒!

4 个答案:

答案 0 :(得分:2)

我认为更改类的公共接口以适应单元测试总是一个坏主意。那就是“尾巴摇尾巴”。

如果你必须访问对象的内部状态来测试它,我会在我的测试命名空间中创建一些扩展方法,以便轻松访问对象的私有属性(例如,T GetPropertyValueByName(此字符串属性名称)。

答案 1 :(得分:1)

如果没有看到您的代码,您的设计可能需要更改以使其更易于测试。考虑提取界面并向您的班级提出dependancy injection,以便您可以根据需要设置内部状态。使用此方法,您可以在构造期间设置私有成员。还可以尝试使用模拟库。 Moq是我的最爱。

答案 2 :(得分:0)

您可以将单元测试库设置为域库的friend,并将域类的私有成员更改为内部。

答案 3 :(得分:0)

我同意Eric的声明,即单元测试不应该影响类API。

在您的情况下,听起来您的设计可能不太正确。您正在讨论需要检查私有变量的单元测试 - 但应使用公共API完全定义单元测试。

分割对象以便私有字段在某个层暴露(使对象更细粒度),或者将测试更改为不需要访问这些私有字段(使您的单元测试更粗粒度)

一个有用的工具是Code Contracts.您可以使用代码契约定义非常细粒度的测试(后置条件和对象不变量,根据私有字段定义),并使您的单元测试更粗粒度。我的一些单元测试只是调用一个方法,并确保代码合同不会触发。