Класс TransactionTemplate в Spring.Net не имеет виртуальных методов, поэтому RhinoMocks не может переопределить метод Execute при создании макета.
Это означает, что вы фактически не заглушаете метод Execute, а вызываете реальный метод. Этот метод Execute вызывает объект IPlatformTransactionManager, который вы еще не предоставили, и поэтому возникает исключение NULL.
Учитывая, что метод Execute является частью интерфейса ITransactionOperations, вы можете избежать создания фиктивного объекта ITransactionOperations и использовать его в оставшейся части теста.
В качестве альтернативы вы можете попытаться предоставить фиктивный IPlatformTransactionManager для класса TransactionTemplate, а также реализацию ITransactionCallback.DoInTransaction () для использования синтаксиса tDelegate.Stub (). Do ().
Примерно так:
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);