【问题标题】:Test Method Fails in Test Suite but passes individually in .net C#测试方法在测试套件中失败,但在 .net C# 中单独通过
【发布时间】:2016-03-04 10:18:16
【问题描述】:

我在 .net 回归测试中遇到了一个非常奇怪的问题。我有一个测试方法在我运行完整的测试套件时失败,但相同的测试方法在单独运行时通过。

这背后的可能原因是什么。我仔细检查了其他测试方法对其没有影响。测试方法使用 Web 服务来获取一些数据,我不知道为什么它在套件中运行时会得到不正确的数据。

以前有没有人遇到过类似的情况。

【问题讨论】:

  • 测试失败的信息是什么?您是否尝试过调试测试?
  • 这里最可能的原因是您在此特定测试之前运行的某些测试有副作用,会以某种方式影响您失败的测试。
  • @raderick 我如何确保不会发生这种情况。任何想法或建议:)
  • @GediminasMasaitis 它在断言语句中失败。从服务接收到的数据与预期数据不同。如果有人遇到类似问题,我正在寻求一些指导。
  • 你可以调试你的整个测试套件,这样你就可以看到哪些地方抛出了异常,以及提供了哪些设置。另一种方法是运行测试套件禁用测试组以查看哪个特定组影响您的测试。在某些时候,您会发现问题的原因是什么测试。

标签: c# unit-testing regression-testing


【解决方案1】:

我在 .net 回归测试中遇到了一个非常奇怪的问题。我有一个测试方法在我运行完整的测试套件时失败,但在单独运行时相同的测试方法通过。

我之前也遇到过类似的事情,通常与:

  1. 应用程序设置。 Web 服务可能就是这种情况。请注意,您的测试在测试应用程序中运行,而不是在普通的“exe”应用程序中运行。
  2. 静态变量/初始化。如果您有[testmethod][testclass],则该类将被实例化一次,之后将调用所有方法。如果你在课堂上使用状态,事情可能会被破坏。

在所有情况下,找出发生了什么的最简单方法可能是在调用服务之前放置一个断点。

【讨论】:

    【解决方案2】:

    您很可能以某种方式受到了测试污染。检查您创建的任何全局状态,以确保在运行测试之前将其重置为所需状态。

    使用大量的日志记录来找到它的源头:)

    【讨论】:

      【解决方案3】:

      我也遇到了同样的问题,它不仅是 Microsoft 框架所独有的。我也在 NUnit 中看到了这一点。对我来说(也是最常见的)是您在多个测试中访问同一个项目,因此它的状态与作为一个组运行时所期望的不同。一开始很难发现,但如果您在编写测试时想到任何测试都应该能够在几乎任何情况下随时运行,那么您应该很高兴。

      为了帮助找出问题所在,请尝试断言有关您假设为真的状态的事情(例如 Id == 1,或 Name == null,或 IsConnected == false)如果您可以让它失败在你开始之前,你可以确定它与状态有关。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-06
        • 1970-01-01
        • 2011-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多