With.Transaction 使用 UnitOfWork.Current 属性。UnitOfWork 是一个静态类——你不能用 RhinoMocks 模拟它。
UnitOfWork.Current 是一个公共静态属性,因此您可以将其换掉。不幸的是,setter 是内部的。
我为您看到 3 个选项:
修改 Rhino.Commons 源,使 UnitOfWork.Current 设置器公开,并在您的单元测试中设置它。
使用反射将 UnitOfWork.Current 设置为您的假工作单元。
由于 UnitOfWork.Current 在内部使用 Local.Data 来查找当前事务,您应该可以去:
Rhino.Commons.Local.Data[UnitOfWork.CurrentUnitOfWorkKey] = myFakeUnitOfWork;
好消息是 UnitOfWork.Current 是一个 IUnitOfWork,RhinoMocks 可以轻松伪造接口。
最后我必须说,我对 Rhino.Commons 不是很熟悉,所以 Ayende 可能已经建立了一种伪造 UnitOfWork 的正确方法。如果这对您来说非常重要,您应该在 Rhino 讨论组中提问。