【问题标题】:Howto break on UnitTesting.Assert.AreEqual?如何打破 UnitTesting.Assert.AreEqual?
【发布时间】:2013-01-08 09:50:18
【问题描述】:

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

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

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

例如我的单元测试中有很多循环方式如下,想知道哪个迭代失败了:

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

【问题讨论】:

  • 也许 nUnit 的测试用例是你想要的?它们允许您逐个调试。
  • 当我使用 VS 时,我通常在调试模式下启动所有测试。如果有一些异常,调试器会中断任何异常。这要求您不设置任何断点。不是真正的解决方案,因此只是需要考虑的评论。

标签: c# visual-studio-2010 unit-testing


【解决方案1】:

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

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

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

【讨论】:

  • +1 只是在寻找示例代码来提供这样的答案,击败我;)将其编辑到您的答案中可能会有所帮助 System.Diagnostics.Debugger.Break();
  • 这可能只是一个偏好问题(或者我错过了一些真正有用的东西),但我从未使用过。我一直觉得断点的全部意义在于你不需要为了调试而修改你的实际源代码。
  • 大多数情况下,当您想始终停在那里时,将它们放在边缘通常很好,但有时如果它重复说 1000 次,您不想按 f5 999 次来获得第 1000 个,根据我的经验,程序断点可以帮助您加快开发速度
  • 这就是我在断点上使用“命中计数”设置的地方。您可以专门将其设置为仅在第 1000 次通过时才中断。您甚至可以将其设置为在命中数是数字的倍数时中断,例如每命中 10 次。
  • 嘿,不要道歉 - 考虑所有选项总是值得的,编程方法存在是有原因的。例如,我发现关于断点的恼人之处在于,不小心单击就很容易意外删除断点,这意味着您必须重新设置它的所有属性。仅出于这个原因,我一直很想使用Debugger 的东西,在我经常使用断点的地方。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果您使用 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 2010-09-23
      • 2017-11-23
      相关资源
      最近更新 更多