在要测试的对象上模拟属性

时间:2013-03-24 19:24:35

标签: c# unit-testing moq

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

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功能。

1 个答案:

答案 0 :(得分:3)

  

我可以实例化一个实际的ClassToTest,并为我的Total测试执行使其处于正确状态的函数,但之后我不只是测试Total函数。

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

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

虽然肯定有一些模拟框架允许你在测试原始Total行为的同时模仿这种行为,但我个人避免嘲笑你试图测试的同一个类 - 事实上我d避免过度使用模拟。它在正确的位置很好,但在真实的东西(以及单独测试的“真实的东西”)中,我会这样做。