繁体   English   中英

如何连续运行NUnit测试夹具?

[英]How to run NUnit test fixtures serially?

我在C#/ NUNit中实现了几套集成测试。 每个测试套件都是一个单独的类,每个夹具设置从脚本创建并填充SQL Server数据库。 这一切都曾经在Resharper 5.1之前工作得很好。

不幸的是,Resharper 5.1开始同时运行多个灯具。 这是一个重大改变 - 他们都在尝试创建和填充相同的数据库,这显然最终会陷入混乱。 有什么方法可以让Resharper连续运行我的测试夹具吗?

如果没有,你会建议连续运行我的NUnit测试夹具,一次一个夹具? 单个测试运行的顺序无关紧要。

我不知道是否有可能阻止ReSharper并行运行测试; 如果没有,以下hack可能会起作用:使用静态只读Monitor成员创建一个静态类。 然后,在[TestFixtureSetUp]调用Enter()在监视器上,并调用Exit()在监视器上[TestFixtureTearDown] 这样,一次只允许运行一个测试夹具。 不漂亮,但......

你确定吗 ? 我只是尝试了这个...通过在3个差异NUnit灯具中测试下面的形式的跟踪,然后是“全部运行”。 似乎没有并行运行。

Trace.WriteLine(DateTime.Now.ToString("hh:mm:ss.ffff") + "VC:Start");
Trace.WriteLine(DateTime.Now.ToString("hh:mm:ss.ffff") + "VC:Done");

我看到的输出是:(R#Build 5.1.1753.1)

01:06:41.6639IOC
01:06:41.6649Done - IOC

01:06:41.6679VC:Start
01:06:41.6729VC:Done

01:06:41.2439Mef
01:06:41.6589Mef-Done

除非被测试的代码执行自己的事务管理,否则您可以在事务中运行每个测试。 这样,不同的测试不会互相干扰。 此外,您不必担心每次测试后清理,因为每个测试的事务可以在测试完成后简单地中止。

在我们的项目中,我们通常让我们的集成测试来自一个看起来或多或少像这样的类:

public class TransactionalTestFixture
{
    private TransactionScope TxScope;

    [SetUp]
    public void TransactionalTestFixtureSetUp()
    {
        TxScope = new TransactionScope(TransactionScopeOption.RequiresNew, 
                                       new TransactionOptions {IsolationLevel = IsolationLevel.Serializable});
    }

    [TearDown]
    public void TransactionalTestFixtureTearDown()
    {
        TxScope.Dispose();
    }
}

给它们字母名称,即在它们前面加上表示其运行顺序的字母。 如果你需要这个,你应该能够接受这个令人讨厌的命名约定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM