Jon*_*han 3 c# unit-testing conflict
我的一些单元测试之间存在冲突.我有一个静态事件的类,当我一次运行一个测试时我没有问题,但是当我批量运行所有测试时,触发事件的测试将因为注册的监听器(具有在之前的测试中注册了该事件).
显然,我不希望在测试类触发事件时执行事件处理程序,那么最佳解决方案是什么?
我知道如果事件不是静态的话我不会有问题,但如果有另一个解决方案,我宁愿不必重新设计它.
在运行测试之前分离所有事件侦听器可能是一个解决方案,但我认为不可能从类外部执行此操作(这似乎是正常原因,我们不希望客户端能够分离所有其他侦听器),以及从内部做这意味着我必须在类中添加一个方法,仅用于单元测试,这是不好的做法.
有没有办法以隔离模式运行测试,以防止其他先前的测试影响它?就像它是在完全分离的进程中运行一样,这样我就不会得到对静态事件的相同引用?(但我仍然需要能够通过简单的点击批量执行所有测试)
感谢您的帮助和想法!
有关信息,我使用的是Visual Studio 2012单元测试框架.
在每个单独测试中的某个地方,您将自己附加到静态事件.因此,在断言之前简单地分离自己或者更好地保护最终块内的分离:
[TestCase]
public void MyTestDetachingBeforeAssert()
{
bool finishedCalled = false;
var eventListener = new EventHandler((sender, e) => finishedCalled = true);
MyClass.Finished += eventListener;
// Can lead to detach problems if this throws an exception!
MyClass.DoSomething();
MyClass.Finished -= eventListener;
Assert.That(finishedCalled);
}
[TestCase]
public void MyTestDetachingInFinally()
{
bool finishedCalled = false;
var eventListener = new EventHandler((sender, e) => finishedCalled = true);
try
{
MyClass.Finished += eventListener;
MyClass.DoSomething();
Assert.That(finishedCalled);
}
finally
{
MyClass.Finished -= eventListener;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
479 次 |
| 最近记录: |