我的应用程序使用 Rhino.Commons - NHRepository 和 UnitOfWork。我喜欢事务的 With.Transaction() 语法并且已经使用它一段时间了。
但是我遇到了一个问题 - 如何模拟 UnitOfWork 进行测试?特别是这给我带来了麻烦:
With.Transaction(() => Repositories.TwinfieldSpooler.Update(spool));
我可以使用 Rhino.Mocks 模拟存储库,但是我如何轻松地为这种代码模拟 UnitOfWork?
最佳答案
With.Transaction 使用 UnitOfWork.Current 属性。 UnitOfWork 是一个静态类——你不能用 RhinoMocks 模拟它。
UnitOfWork.Current 是公共(public)静态属性,因此您可以将其换出。不幸的是,setter 是内部的。
我为您看到 3 个选项:
公开,并将其设置在您的单元测试中。
工作的。
交易,你应该能够
去:
Rhino.Commons.Local.Data[UnitOfWork.CurrentUnitOfWorkKey] = myFakeUnitOfWork;
一个好消息是 UnitOfWork.Current 是一个 IUnitOfWork,并且 RhinoMocks 可以很容易地伪造接口(interface)。
最后我必须说,我对 Rhino.Commons 不是很熟悉,所以 Ayende 可能已经建立了一种伪造 UnitOfWork 的正确方法。如果这对您来说非常重要,您应该在 Rhino 讨论组中提问。
关于unit-testing - 你如何从 Rhino.Commons 模拟 UnitOfWork?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/724500/