领域模型(公开公共属性)

本文关键字:属性 领域模型 | 更新日期: 2023-09-27 18:02:40

因此,当构建我的领域模型时,我试图务实地只暴露驱动行为所需的东西,但我的单元测试要求我暴露公共getter,这些getter只在类中真正需要。大家是怎么处理的?我的域层只能通过我的应用程序服务层访问,所以真的是那么重要吗?我应该把它们放在内部,并给测试项目访问权限吗?

任何帮助将是伟大的!

领域模型(公开公共属性)

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

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

如果没有看到您的代码,似乎您的设计可能需要更改以使其更具可测试性。考虑提取接口并实现类的依赖注入,以便在需要时设置内部状态。使用此方法,您可以在构造期间设置私有成员。还可以尝试使用mock库。Moq是我的最爱。

我同意Eric的说法,即单元测试不应该影响类的api。

在你的情况下,听起来你的设计可能不太正确。你说的是需要检查私有变量的单元测试——但是单元测试应该使用公共api来完全定义。

要么拆分您的对象,以便在某些层暴露私有字段(使对象更细粒度),要么更改您的测试以不需要访问那些私有字段(使您的单元测试更粗粒度)。

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

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