编程语言
首页 > 编程语言> > c# – 为什么MSDTC在使用mstest进行单元测试时表现不一致?

c# – 为什么MSDTC在使用mstest进行单元测试时表现不一致?

作者:互联网

我在测试我的Nhibernate存储库时遇到了一个奇怪的问题.

我有10个单元测试,如下所示.每次在批处理中运行它们时,第一次失败,其余成功.如果一个接一个地运行它们都会失败.如果在我的testrun之前重新启动MSDTC,它有时会像以前一样运行,有时候所有测试都会成功.我找不到一个模式,为什么它表现得那样.

我希望事务回滚,以便为每个测试启动一个干净的DB,从而处理事务.

由于此错误,测试/测试失败:

System.Data.SqlClient.SqlException: MSDTC on server ‘MYCOMPUTERNAME\SQLEXPRESS’ is unavailable.

我的测试看起来像这样:

[TestInitialize]
public void MyTestInitialize()
{
    _transactionScope = new TransactionScope();
}

[TestCleanup]
public void MyTestCleanup()
{
    if (_transactionScope != null)
    {                
        _transactionScope.Dispose();
        _transactionScope = null;
    }
}             

[TestMethod]
[TestCategory("RepositoryTests")]
public void RepositoryCanSaveAProduct()
{
    var platform = ProductObjectMother.CreatePlatform("100010", "Supplier 10");

    var mainsegment = ProductObjectMother.CreateMainSegment("123");
    var application = ProductObjectMother.CreateApplication("Foo");
    var productfamily = ProductObjectMother.CreateProductFamily("X99");

    Engine i = ProductObjectMother.CreateEngine(platform, productfamily, application, mainsegment);
    var repository = new ProductRepository();
    repository.Save(i);
    repository.Flush();
}

解决方法:

问题似乎与使用_transactionScope.Complete()未提交的事务或通过抛出异常回滚.

另外我注意到一个奇怪的事情,测试通常失败或通过测试中缺少的“断言”函数(等于,不等于,存在等来自assert)成功运行.

标签:c,nhibernate,mstest,msdtc
来源: https://codeday.me/bug/20190704/1374654.html