我有一个不可变类,其中包含在构造函数执行期间设置的一些私有(private)字段。我想对这个构造函数进行单元测试,但我不确定这种情况下的“最佳实践”。
简单示例
此类在 Assembly1 中定义:
public class Class2Test
{
private readonly string _StringProperty;
public Class2Test()
{
_StringProperty = ConfigurationManager.AppSettings["stringProperty"];
}
}
此类在 Assembly2 中定义:
[TestClass]
public class TestClass
{
[TestMethod]
public void Class2Test_Default_Constructor()
{
Class2Test x = new Class2Test();
//what do I assert to validate that the field was set properly?
}
}
编辑 1 :我已经用一个潜在的解决方案回答了这个问题,但我不确定这是否是“正确的方法”。因此,如果您认为自己有更好的想法,请发布。
这个例子真的不值得测试,但假设构造函数有一些更复杂的逻辑。如果类上方法的所有测试都有效,那么避免测试构造函数并假设它有效的最佳方法是什么?
编辑 2 : 看起来我做的样本有点简单。我已经用更合理的情况更新了它。
最佳答案
什么都没有,除非您使用该字段。您不希望通过测试进行过度规范。换句话说,不需要测试赋值运算符是否有效。
如果您在方法或其他东西中使用该字段,请调用该方法并对其进行断言。
编辑:
assume the constructor has some more complex logic
您不应该在构造函数中执行任何逻辑。
编辑2:
public Class2Test() { _StringProperty = ConfigurationManager.AppSettings["stringProperty"]; }
不要那样做! =) 你的简单单元测试现在变成了集成测试,因为它依赖于多个类的成功运行。编写一个处理配置值的类。 WebConfigSettingsReader 可以是名称,它应该封装
ConfigurationManager.AppSettings
称呼。将 SettingsReader 类的实例传递给 Class2Test
的构造函数.然后,在你的单元测试中,你可以模拟你的 WebConfigSettingsReader
并保留对您可能对其进行的任何调用的响应。
关于c# - 如何对不可变类构造函数进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/130730/