C#中的Moq事务范围

时间:2016-03-17 11:19:38

标签: c# moq transactionscope

有没有办法管理事务范围以确保在进程中调用提交,完成或回滚操作?

鉴于此功能:

public void DoSomething(int param)
{
    using (TransactionScope transactionScope = new TransactionScope())
    {
        factory.DoSomething(param);
        factory.DoSomethingElse(param);

        transactionScope.Complete();
    }
}

有没有办法通过IDisposable接口调用Verify函数?它似乎只包含一个Dispose函数,我想测试Commit或Rollback。

谢谢

1 个答案:

答案 0 :(得分:5)

TransactionScope是密封类,仅从IDisposable接口派生。 在我考虑的时候,你需要为TransactionScope和接口创建自己的包装类,这样你就可以使用并模拟它。

class TransScopeWrapper : ITransScope, IDisposable
{
    private TransactionScope scope;

    public TransScopeWrapper()
    {
        scope = new TransactionScope();
    }

    public void Dispose()
    {
        scope.Dispose();
    }
    public void Complete()
    {
        scope.Complete();
    }

    public void Rollback()
    {
        ...
    }
}


internal interface ITransScope
{
    void Complete();
    void Rollback();
}

你还需要以某种方式注入ITransScope模拟。我会按照以下方式进行操作

public void DoSomething(int param)
{
    using (TransScopeWrapper transactionScope = new TransScopeWrapper ())
    {
        DoSomething(param, transactionScope);
    }
}

internal void DoSomething(int param, ITransScope transaction) 
{ 
    factory.DoSomething(param);
    factory.DoSomethingElse(param);

    transaction.Complete();
}

所以现在你可以测试模仿DoSomething(int param, ITransScope transaction)的{​​{1}}方法。