C# 中的最小起订量事务范围

Moq Transaction Scope in C#

是否有任何方法可以最小化事务范围以确保在流程中调用提交、完成或回滚操作?

给出这个函数:

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

        transactionScope.Complete();
    }
}

有什么方法可以通过 IDisposable 接口调用 Verify 函数吗?好像只有一个Dispose函数,我想测试一下Commit或者Rollback。

谢谢

TransactionScope 是密封的 class 并且仅派生自 IDisposable 接口。 正如我所考虑的,您需要为 TransactionScope 和界面制作自己的包装器 class,以便您可以使用和模拟它。

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();
}

所以现在您可以测试模拟 ITransScopeDoSomething(int param, ITransScope transaction) 方法。