xyz*_*xyz 6 c# nunit unit-testing deadlock
我是单元测试和nUnit(2.48)的新手.我想写一个测试方法,其中失败的情况是它死锁.这可能吗?显然,nUnit默认情况下不知道该方法应该执行多长时间,因此我是否必须编写代码来在单独的线程上完成工作然后中止它并抛出异常(如果花费的时间超过我定义的时间)?有一个更好的方法吗?
谢谢
那么它肯定可以通过在另一个线程上运行你的代码并查看它是否及时返回来测试死锁.这是一些(非常基本的)示例代码:
[TestFixture]
public class DeadlockTests
{
[Test]
public void TestForDeadlock()
{
Thread thread = new Thread(ThreadFunction);
thread.Start();
if (!thread.Join(5000))
{
Assert.Fail("Deadlock detected");
}
}
private void ThreadFunction()
{
// do something that causes a deadlock here
Thread.Sleep(10000);
}
}
Run Code Online (Sandbox Code Playgroud)
我不想说这是"最好的方式",但我发现它是有用的.
这是可能的,但它可能不是最好的事情.单元测试不适合测试并发行为,遗憾的是没有多少适合的测试方法.
NUnit不会对线程做任何事情.您可以编写启动多个线程的测试,然后测试它们的交互.但是这些开始看起来更像集成测试而不是单元测试.
另一个问题是死锁行为通常取决于调度线程的顺序.所以很难编写一个结论性测试来测试某个死锁问题,因为你没有对线程调度的任何控制,这是由OS.您最终可能会遇到有时在多核处理器上失败的测试,但总是在单核处理器上取得成功.
归档时间: |
|
查看次数: |
3370 次 |
最近记录: |