Tza*_*ahi 5 c# multithreading unit-testing visual-studio-2010
我有基本运行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!");
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,我原以为TestMethod()测试应该失败,但是实际上发生的是,运行该Assert.Fail方法的任务线程发生异常,而另一个线程继续运行并且测试通过。
我正在寻找一种无法通过测试方法的方法
您可以尝试获取对测试线程的引用并调用Abort()它。您可以传递一个异常状态对象,Abort()您可以使用该对象传递失败消息:
[TestClass]
public class SomeTestClass
{
Thread testThread;
[TestInitialize]
public void BeforeTest()
{
testThread = Thread.CurrentThread;
var task = new Task(abortIfTestStilRunsAfterTimeout);
task.Start();
}
[TestMethod]
public void TestMethod()
{
try
{
Thread.Sleep(5000);
}
catch (ThreadAbortException e)
{
Assert.Fail((string)e.ExceptionState);
}
}
private void abortIfTestStilRunsAfterTimeout()
{
testThread.Abort("timeout passed!");
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不想修改大约 100 个测试,您可以使用 PostSharp 等工具通过在try {} catch {}每个测试用例周围插入逻辑来修改您的测试用例。归根结底就是编写一个属性并用它来装饰您的测试程序集(这称为面向方面编程,PostSharp 中的框架称为 Laos)。
| 归档时间: |
|
| 查看次数: |
2323 次 |
| 最近记录: |