1

我在一个类的实例上有一个属性,它本质上是对该类的其他属性求和。如何模拟“已知”属性但仍调用实例上的方法?这显然不起作用,但希望能解决我的问题:

public void TestSum()
{
    // Arrange
    var classToTestInstance = new ClassToTest();
    classToTestInstance.MyProp1 = new Mock().Returns(5); // MyProp1 is private set;
    classToTestInstance.MyProp2 = new Mock().Returns(3); // Same

    // There's not really an Act here...

    // Assert; Total is the actual property I want to test
    classToTestInstance.Total.Should().Be(8);

}

我可以实例化一个实际的 ClassToTest 并执行将其置于正确状态以进行 Total 测试的函数,但我不只是在测试 Total 功能。

4

1 回答 1

3

我可以实例化一个实际的 ClassToTest 并执行将其置于正确状态以进行 Total 测试的函数,但我不只是在测试 Total 功能。

不,但是如果您觉得需要单独测试该功能,那么它可能不应该是同一个对象的一部分。

就我个人而言,我会这样做:让对象进入正确的状态,然后测试Total. 不要忘记,您可以对函数进行大量专用单元测试,这些函数也将用于使对象进入正确状态。

虽然肯定有一些模拟框架可以让您在测试原始Total行为时模拟这种行为,但我个人会避免模拟您尝试测试的同一个类 - 实际上我会避免过度使用模拟。它在正确的地方很棒,但是在使用真实的东西同样容易的地方(并且“真实的东西”是单独测试的)我会这样做。

于 2013-03-24T19:29:38.793 回答