具有多种方法 `Returns` 可能性的测试方法

Test method with multiple method `Returns` possibilities

我想用模拟对象的不同行为对一个测试方法执行数 (3) 次。所以我可以避免为每个方法编写多个带有模拟对象的测试方法。

代码示例:

_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" };

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

编辑

我发现我必须使用 TestCaseSourceAttribute。但现在我面临另一个'issue'。当我有很多测试用例并且其中一个失败时,我无法追踪哪个测试用例失败了...

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

[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
}

一些研究使我得出以下结论:

[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" },
};