我有一个不可变的类,其中包含一些在构造函数执行期间设置的私有字段.我想对这个构造函数进行单元测试,但我不确定这种情况下的"最佳实践".
简单的例子
这个类在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:看起来我做的样本有点简单.我已经用更合理的情况更新了它.
没什么,除非你使用那个领域.您不希望通过测试进行过度规范.换句话说,不需要测试赋值运算符是否有效.
如果您在方法或其他内容中使用该字段,请调用该方法并对其进行断言.
编辑:
假设构造函数有一些更复杂的逻辑
您不应该在构造函数中执行任何逻辑.
编辑2:
public Class2Test() { _StringProperty = ConfigurationManager.AppSettings["stringProperty"]; }
不要那样做!=)您的简单单元测试现在已成为集成测试,因为它取决于多个类的成功操作.编写一个处理配置值的类.WebConfigSettingsReader可以是名称,它应该封装ConfigurationManager.AppSettings
调用.将该SettingsReader类的实例传递给构造函数Class2Test
.然后,在您的单元测试中,您可以模拟WebConfigSettingsReader
并对您可能对其进行的任何调用进行响应.