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();
}
所以现在您可以测试模拟 ITransScope
的 DoSomething(int param, ITransScope transaction)
方法。
是否有任何方法可以最小化事务范围以确保在流程中调用提交、完成或回滚操作?
给出这个函数:
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();
}
所以现在您可以测试模拟 ITransScope
的 DoSomething(int param, ITransScope transaction)
方法。