2011-01-21 6 views
3

私はRhino Mock 3.6 RepositoryとNhibernateを使用しています。しかし、ExpectationViolationExceptionが発生しました。#0、Actual#1が必要です。私は2日間それを費やした。私は何が間違っているのか分からない。ここに私のコードです。 mockRepository.Save(ユーザー)行にエラーが表示されます。Rhino Mock 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内部で使用されるインターフェイス上でモックを設定する必要があります。これらをユーザリポジトリに渡して、デフォルト動作を何らかの形で上書きする必要があります。

実際にテストする内容を決定する必要があります。

上記のコードは私に次のことを意味し

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

ただの推測ですが、あなたの意図は、validateメソッドがあることをテストする場合のポイントは、あなたが現在持っているコードは、ユーザーをからかっする必要がありますされていることuserrepository.saveメソッド内で呼び出される

+1

また、rhinoモックのAAA構文を確認すると分かりやすいでしょう – Andrew

6

StrickMockを使用しています。これは、Expectationsを設定したコールだけが有効とみなされることを意味します。 Saveが呼び出されるという期待を設定していないため、エラーが発生しています。

1

通常、これはRhinoMockがuser.Validate()を1回呼び出すと想定していますが、メソッドを2回呼び出すことを意味します。メソッドを1回だけ呼び出すか、変更するかをチェックすることができます。

Expect.Call(user.Validate())戻り値(validationResults);

にExpect.Call(user.Validate())戻り(validationResults).Repeat.Twice()。

関連する問題