VS UnitTest项目中断言的标准行为是告诉我测试在特定行上失败。
但是,如果我在这样的断言失败时能够破解,那么它会很方便。因为只在该行上设置断点也会导致测试用例失败。如果我能断言断言失败,我可以立即看到哪个测试用例失败。
当断言失败时,如何暂时告诉VS中断?
E.g。我在单元测试中以下列方式有很多循环,并想知道哪个迭代失败了:
foreach(var testcase in testcases)
{
Assert.AreEqual(testcase.ExpectedOutputData, FuncionUnderTest(testcase.InputData));
}
答案 0 :(得分:5)
只需使用条件断点,并将其置于断言检查的逻辑否定之处。
就我个人而言,我认为断点严重未被充分利用,只不过是“此时突破”工具 - 它们非常通用,并且可以轻松地用于代替Console.WriteLine
来显示调试输出而无需实际修改代码,以及仅在断言失败时才会中断。
如果过度使用这种方式,它们确实会导致一点性能损失,但这很少是运行单元测试的问题。
答案 1 :(得分:4)
在没有太多了解你如何构建单元测试的情况下,在我看来,如果你正在努力查看哪个断言导致你的单元测试失败,那么也许你在个别测试中测试太多了?单元测试应该尽可能原子化,以正确地否定这个问题。如果你可以打破你的测试,甚至在单个测试中只有一个断言,那么找出哪个测试失败就会容易得多。我肯定会提倡将特定于断点的代码写入单元测试中。
答案 2 :(得分:2)
如果你使用nUnit,你可以使用它来分别调试:
[TestCase(0)]
[TestCase(1)]
public void NunitTestCases(int expected)
{
Assert.AreEqual(expected,0);
}
我想你总能做到这一点:
[Test]
public void BreakTest()
{
for (int i = 0; i < 2; i++)
{
bool condition = i == 0;
if(!condition)
Debugger.Break();
Assert.IsTrue(condition);
}
}