测试方法有多种方法`返回'的可能性

时间:2017-05-30 11:57:56

标签: c# nunit nsubstitute

我想用一个模拟对象的不同行为执行一次Test方法几(3)次。所以我可以避免为每个使用模拟对象编写多个Test方法。

代码示例:

_mockObj.MockedMethod(Arg.Any<string>(), Arg.Any<string>()).Returns(new objA() { TestProp="bla1" };
_mockObj.MockedMethod(Arg.Any<string>(), Arg.Any<string>()).Returns(new objA() { TestProp="bla2" };
_mockObj.MockedMethod(Arg.Any<string>(), Arg.Any<string>()).Returns(new objA() { TestProp="bla3" };

我想要做的是使用一种Test方法来测试上述3种行为。这是可能的还是我必须编写3个单独的测试方法?

修改

我发现我必须使用TestCaseSourceAttribute。但现在我正面临着另一个问题&#39;。当我有很多TestCase并且其中一个失败时,我无法追踪哪一个TestCase失败......

2 个答案:

答案 0 :(得分:2)

方法!=测试。使用参数,一种方法可以生成许多测试用例。例如......

[TestCase("bla1")]
[TestCase("bla2")]
[TestCase("bla3")]
public void MyTest(string blaValue)
{
    _mockObj.MockedMethod(Arg.Any<string>(), Arg.Any<string>())
        .Returns(new objA() { TestProp=blaValue };

    // Your test code
}

答案 1 :(得分:1)

一些研究让我想到了这一点:https://stackoverflow.com/a/10687118/1410501

[Test, TestCaseSource(nameof(MyTestCases))]
public void TestMethod(object obj)
{

}

private static readonly object[] MyTestCases =
{
    new object { TestProp="bla1" },
    new object { TestProp="bla2" },
    new object { TestProp="bla3" },
};