2011-01-21 79 views
3

我正在使用Rhino模擬3.6版本庫和Nhibernate。但我得到ExpectationViolationException預期#0,實際#1。我花了兩天時間。我不知道我做錯了什麼。這是我的代碼。我在mockRepository.Save(用戶)行發生錯誤。犀牛模擬3.6存儲庫預期#0,實際#1

 var username = "abcdef"; 
     var mocks = new MockRepository(); 
     var validationResults = new ValidationResults(); 
     IDataQuery query = mocks.StrictMock<IDataQuery>(); 
     UserRepository mockRepository = mocks.StrictMock<UserRepository>(query); 
     var user = mocks.StrictMock<User>(); 

     user.FirstName = "javed"; 
     user.LastName = "ahmad"; 
     user.UserName = "abc"; 
     user.Password = "password"; 
     user.Email = "[email protected]"; 
     user.IsActive = true; 
     user.CreatedBy = 1000000; 
     user.CreatedDate = DateTime.Today; 
     user.ModifiedBy = 1000000; 
     user.ModifiedDate = DateTime.Today; 

     Expect.Call(user.Validate()).Return(validationResults); 
     mocks.ReplayAll(); 

     mockRepository.Save(user); 

在此先感謝。

感謝 伊姆蘭

回答

0

你似乎是嘲笑一切甚至SUT即userrepository 你應該對將在userrepository內部使用的接口設置嘲笑。您將需要將這些傳遞給userrepository來以某種方式覆蓋它們的默認行爲。

你需要決定你真正想測試的東西。

上面的代碼意味着下面我

class UserRepository 
{ 
    public void Save(IUser user) 
    { 
    validationResult = user.Validate(); 
    if (validationResult==null) 
    { 
     dal.Save(user); 
    } 
    } 
} 

這只是一個猜測,但問題是你現在已經只能嘲笑用戶,如果你的目的是要測試的驗證方法是代碼在userrepository.save方法內調用

+1

你也可能想要查看rhino mock的AAA語法,這很容易理解 – Andrew 2011-01-21 21:02:20

6

您正在使用StrickMock,這意味着您認爲有效的唯一調用是您爲期望設置的調用。由於您沒有設置Save將會被調用的期望值,因此您會收到錯誤消息。

1

通常這意味着RhinoMock期望您調用一次user.Validate(),但您調用該方法兩次。您可以檢查您是否只調用一次該方法或更改

Expect.Call(user.Validate())。Return(validationResults);

Expect.Call(user.Validate())返回(validationResults).Repeat.Twice();