2009-11-22 20 views

回答

1

這取決於你想測試什麼。你關心Add()方法是否被調用,或者你只是想設置一個可能被調用或不被調用的罐頭響應?

如果您預計通話: -

var mocks = new MockRepository(); 
var repo = mocks.StrictMock<IRepository>(): 

var myObj = CreateSampleObject(); 

using(mocks.Record()) 
{ 
    Expect.Call(repo.Add(myObj)).Return(myObj); 
} 

using(mocks.Playback()) 
{ 
    var target = CreateTarget(repo); 
    target.DoSomething(myObj); 
} 

如果你不在乎它是否被調用或沒有,則使用SetUpResult,而不是期望的,例如

SetUpResult.For(rep.Add(myObj)).Return(myObj); 
2

AdamRalph是正確的,但我更喜歡犀牛製品的AAA語法:

// arrange 
var repo = MockRepository.GenerateStub<IRepository>(); 
var myObject = CreateSampleObject(); 
repo.Stub(r => r.Add(myObj)).Return(myObj); 

// act (this assumes that the call to "SomeMethod" on "SomeClass" 
// returns the result of the IRepository.Add). 
var someClass = new SomeClass(repo); 
var result = someClass.SomeMethod(); 

// assert 
Assert.AreSame(myObject, result); 
相關問題