首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果我尝试在父类中使用NUnit,那么EF & TransactionScope为什么会抛出异常呢?

如果我尝试在父类中使用NUnit,那么EF & TransactionScope为什么会抛出异常呢?
EN

Stack Overflow用户
提问于 2014-08-21 15:45:14
回答 1查看 69关注 0票数 0

如果我这样做的话:

代码语言:javascript
复制
public class AIntegrationTests
{

    protected TransactionScope transaction = null;

    [SetUp]
    public void SetUp()
    {
        transaction = new TransactionScope(TransactionScopeOption.Required);
    }

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

}

[TestFixture]
public class UserRepositoryIntegrationTests : AIntegrationTests
{
    private UserRepository _sut;

    [SetUp]
    public void SetUp()
    {
        _sut = new UserRepository();

    }

    //tests
}

我知道这个错误:

代码语言:javascript
复制
 network access for distributed transaction manager (msdtc) has been disabled 
Please enable Network DTC access because of qlBulkCopy.WriteToServer(DataTable table) 
for particular database

当我从父类中删除事务实例化并将它放回子类时,我不会收到任何错误。

代码语言:javascript
复制
public class AIntegrationTests
{

    protected TransactionScope transaction = null;

    [SetUp]
    public void SetUp()
    {

    }

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

}

[TestFixture]
public class UserRepositoryIntegrationTests : AIntegrationTests
{
    private UserRepository _sut;

    [SetUp]
    public void SetUp()
    {
        _sut = new UserRepository();
       transaction = new TransactionScope(TransactionScopeOption.Required);
    }

    //tests
}

为什么不允许我在父类中实例化事务。如果我把Dispose调用留在父程序中,它就能正常工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-21 16:21:01

派生类中的SetUp()正在基类中隐藏SetUp(),因此永远不会调用AIntegrationTestsSetUp()

代码语言:javascript
复制
[TestFixture]
public class UserRepositoryIntegrationTests : AIntegrationTests
{
    private UserRepository _sut;

    [SetUp]
    public void SetUp()
    {
        _sut = new UserRepository();
        base.SetUp();
    }

    //tests
}

由于您对两个类都有控制权,所以您应该在基类中创建SetUp() virtual并重写它.

代码语言:javascript
复制
public class AIntegrationTests
{

    protected TransactionScope transaction = null;

    [SetUp]
    public virtual void SetUp()
    {
        transaction = new TransactionScope(TransactionScopeOption.Required);
    }

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

}

[TestFixture]
public class UserRepositoryIntegrationTests : AIntegrationTests
{
    private UserRepository _sut;

    [SetUp]
    public override void SetUp()
    {
        _sut = new UserRepository();
        base.SetUp();
    }

    //tests
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25430558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档