4

VS UnitTest 项目中断言的标准行为是告诉我测试在特定行上失败了。

但是,有时如果在这样的断言失败时我可以中断,那会很方便。因为只是在该换行符上设置一个断点也是为了不失败的测试用例。如果我可以在断言失败时中断,我可以立即看到哪个测试用例失败了。

当断言失败时,如何临时告诉 VS 中断?

例如,我在单元测试中有很多循环,并且想知道哪个迭代失败了:

foreach(var testcase in testcases)
{
    Assert.AreEqual(testcase.ExpectedOutputData, FuncionUnderTest(testcase.InputData));
}
4

3 回答 3

6

只需使用条件断点,并给它断言检查的逻辑否定。

就个人而言,我认为断点被严重低估了,只不过是一个“此时中断”工具——它们非常通用,可以很容易地用于Console.WriteLine显示调试输出而不需要实际修改代码,以及只有在以下情况下才会中断断言将失败。

如果以这种方式过度使用它们确实会导致一些性能下降,但这很少是运行单元测试的问题。

于 2013-01-08T09:57:11.573 回答
4

在没有太多关于如何构建单元测试的知识的情况下,在我看来,如果您正在努力查看哪个断言导致您的单元测试失败,那么也许您在个人测试中测试了太多?单元测试应该尽可能原子化,以完全否定这个问题。如果你可以分解你的测试,甚至在一个测试中只有一个断言,那么找出哪个测试失败会容易得多。我当然会提倡将特定于断点的代码写入单元测试。

于 2013-01-08T10:07:53.797 回答
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);
    }
}
于 2013-01-08T10:04:51.247 回答