【发布时间】:2012-04-10 09:02:47
【问题描述】:
我有基本运行 2 个线程的单元测试示例代码:主测试线程和我正在启动的另一个线程应该在一段时间后测试执行失败(这基本上是一个超时线程)
代码如下:
[TestClass]
public class SomeTestClass
{
[TestInitialize]
public void BeforeTest()
{
var task = new Task(abortIfTestStilRunsAfterTimeout);
task.Start();
}
[TestMethod]
public void TestMethod()
{
Thread.Sleep(5000);
}
private void abortIfTestStilRunsAfterTimeout()
{
Assert.Fail("timeout passed!");
}
}
好吧,我原以为TestMethod() 测试会失败,但实际发生的是运行Assert.Fail 方法的任务线程出现异常,而另一个线程继续运行并且测试通过。
我正在寻找一种使测试方法失败的方法
【问题讨论】:
-
你到底想测试什么?
-
我有 100 个测试用例在我的系统上运行。该系统是一个多线程网络应用程序。当测试用例剂量是以正确的顺序发送我的应用程序消息时,它会等待特定的回复顺序
-
所以如果某些测试需要超过 5000 毫秒,你会手动失败吗?
-
通常,当你有线程时,你正在做的测试类型不被认为是“单元测试”。单元测试用于测试确定性案例,而线程是非确定性的。
-
如果这听起来很奇怪,我很抱歉,但是什么信号成功,什么信号失败?每个测试用例都由一个单独的头运行,对吧?因此,您创建并启动运行测试用例的线程。你怎么知道它已经成功完成了?测试线程是否调用了一些“OnComplete”委托?
标签: c# multithreading visual-studio-2010 unit-testing