2011-07-26 2 views

답변

1

Spring.Net의 TransactionTemplate 클래스에는 가상 메소드가 없으므로 RhinoMocks가 모의 객체를 만들 때 Execute 메소드를 재정의 할 수 없습니다.

이것은 실제로 Execute 메서드를 스텁 처리하지 않고 실제 메서드로 호출한다는 것을 의미합니다. Execute 메서드는 아직 제공하지 않은 IPlatformTransactionManager 개체를 호출하므로 null 예외가 발생합니다.

Execute 메서드가 ITransactionOperations 인터페이스의 일부인 경우 모의 ITransactionOperations 개체를 만들고 나머지 테스트에서이 개체를 사용할 수 있습니다.

은 다른 방법은 TransactionTemplate의 클래스에 모의 IPlatformTransactionManager를 제공하려고하고, 수 또한 tDelegate.Stub()를 사용하는 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);