【发布时间】:2010-07-30 18:48:39
【问题描述】:
我很想知道在 C# 的 Visual Studio 2008 单元测试框架中是否有任何内置机制可以重试测试。 举个例子,我有一个 C# 单元测试,它看起来像:
[TestMethod]
public void MyMethod() {
DoSomething();
Assert.Something();
}
现在,DoSomething() 偶尔表现不佳;在这种情况下,我想在到达断言之前重新运行 DoSomething() 方法。显然我可以这样做:
...
do {
Initialization();
DoSomething();
} while (PerformedOK() == false);
Assert.Something();
...
虽然这有点麻烦,因为添加了循环并重复测试初始化,否则将完全由其他方法/类构造函数处理。
我的问题是是否有更方便的重试机制,例如:
DoSomething();
if (PerformedOK() == false) Retry();
else Assert.Something();
它将自动重试测试而不将其注册为失败,同时照常执行所有常规初始化代码。
【问题讨论】:
-
为什么有时表现不佳?
-
@Lasse:在这种情况下,它并不是“表现不佳”,因为它只是失去了与另一个组件的同步,而导致它失去同步的方面与这个特定的测试用例无关。无论如何,我的问题更笼统,并不真正关心为什么需要重试。
-
测试实际失败时会发生什么?你会“重试10次然后停止”吗?如果其他组件处于必须重试 11 次的状态怎么办?让我重新表述我的问题。如果你完全删除你的测试会发生什么?脆弱的测试是单元测试的祸根“哦,那个测试,是的,我们知道,它总是失败,忽略它,它会消失的”。
-
@Lasse“测试失败时会发生什么” - 我希望有一个重试机制(如果存在)允许我指定何时应该重试,什么时候不应该......就像在伪- 上面的语法。
-
如果可能的话,我强烈建议只重试特定的已知异常。这样一来,您的测试方法就不会永远运行或每次都通过——它至少会在一些错误上失败。
标签: c# visual-studio unit-testing