你可以对这个对象进行单元测试,但它非常简单,不需要这样做。测试可能类似于(NUnit示例)
[Test]
public void TestRuleViolationConstructorWithErrorMessageParameterSetsErrorMessageProperty() {
var errorMessage = "An error message";
var ruleViolation = new RuleViolation(errorMessage);
Assert.AreEqual(errorMessage, ruleViolation.ErrorMessage);
}
编写这样的测试没有太大的价值,因为您正在测试 .NET 框架的属性是否正常工作。通常情况下,您可以信任 Microsoft 已经做得很好了 :-)
关于模拟,当您的被测类有依赖关系时,例如依赖于应用程序中的另一个类或框架中的类型时,这将非常有用。模拟框架允许您调用依赖项上的方法和属性,而无需在代码中具体构建依赖项,而是允许您注入属性的定义值、方法的返回值等。Moq 是一个很棒的框架,一个带有依赖关系的基本类的测试看起来会像这样:
[Test]
public void TestCalculateReturnsBasicRateTaxForMiddleIncome() {
var policy = new Mock<TaxPolicy>();
bar.Setup(x => x.BasicRate.Returns(0.22d));
var taxCalculator = new TaxCalculator();
var result = taxCalculator.Calculate(policy.Object, 25000);
Assert.AreEqual(5500, result);
}
TaxPolicy
应该在自己的 fixture 中进行单元测试以验证其是否正确。 在这里,我们想要测试 TaxCalculator
是否工作正常,因此我们模拟 TaxPolicy
对象以使我们的测试更简单;这样做,我们可以指定我们感兴趣的 TaxPolicy
部分的行为。 如果没有它,我们将需要创建手动编写的 mocks/stubs/fakes,或者创建真实的 TaxPolicy
实例来传递。
然而 Moq 的功能远不止于此,请查看 快速入门教程 以了解更多。