gpt4 book ai didi

c# - 使用 Rhino 模拟从 Spring.Net 模拟 TransactionTemplate

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:47 25 4
gpt4 key购买 nike

我正在尝试创建 TransactionTemplate 的模拟

var tTemplate = MockRepository.GenerateMock<TransactionTemplate>();
var tDelegate = MockRepository.GenerateMock<ITransactionCallback>();
tTemplate.Expect(x => x.Execute(tDelegate)).IgnoreArguments().Throw(new Exception());

在最后一行我从中得到了 NullPointerException

at Spring.Transaction.Support.TransactionTemplate.Execute(ITransactionCallback action)

知道可能是什么原因吗?

最佳答案

Spring.Net 中的 TransactionTemplate 类没有虚方法,因此 RhinoMocks 无法在您创建模拟时覆盖 Execute 方法。

这意味着您实际上并没有删除 Execute 方法,而是调用了真正的方法。该 Execute 方法调出您尚未提供的 IPlatformTransactionManager 对象,因此会发生 null 异常。

鉴于 Execute 方法是 ITransactionOperations 接口(interface)的一部分,您可以创建一个模拟 ITransactionOperations 对象并在其余测试中使用它。

或者,您可以尝试为 TransactionTemplate 类提供模拟 IPlatformTransactionManager,以及使用 tDelegate.Stub().Do() 语法的 ITransactionCallback.DoInTransaction() 实现。

像这样:

var transactionManager = MockRepository.GenerateMock<IPlatformTransactionManager>();
var mockDelegate = MockRepository.GenerateMock<ITransactionCallback>();
mockDelegate.Stub(t => t.DoInTransaction(null)).IgnoreArguments().Do(...);
var template = new TransactionTemplate(transactionManager);
template.Execute(mockDelegate);

关于c# - 使用 Rhino 模拟从 Spring.Net 模拟 TransactionTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6830294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com