具有多种方法 `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" },
};
我想用模拟对象的不同行为对一个测试方法执行数 (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" },
};