我正在处理一项主要是单线程、单用户的应用程序。有一些工作线程在不时地运行,而它们只使用线程安全的对象和类。实际上,单元测试是使用多个线程进行测试(专门为测试而创建),并且测试结果良好。
但是,当测试不安全的业务对象和子系统时,VSTS单元测试会失败。对于它们不是线程安全的情况,这也是可以接受的,因为应用程序就是这样使用它们的。
但是微软测试的“每个TestMethod一个线程”的方法却给我们带来了困扰。我不得不在许多单元测试类中实现对象锁,以确保测试一个接着一个地运行(我并不真正关心它们的顺序,但是我不能让两个测试方法同时操作同一个对象)。
代码看起来像这样:
[TestClass]
public class TestSomeObject
{
static object turnStile = new object();
...
[TestMethod]
public void T01_TestThis()
{
lock(turnStile)
{
.. actual test code
}
}
[TestMethod]
public void T02_TestThat()
{
lock(turnStile)
{
-- actual test code
}
}
}
有没有更好/更优雅的方法使得测试按顺序运行?