2009-04-07 9 views
3

私はデータリポジトリオブジェクトをモックしようとしていますが、MockRepositoryで期待値を設定した後、毎回nullを返します。私のコードは次の通りです: Rhino Mock:Mockedメソッドがnullを返します

[Test] 
    public void GetById_NotNull() 
    { 
     Person expectedPerson = new Person() { Id = 1, Name="Jon"}; 

     MockRepository MockRepository = new MockRepository(); 
     var FakePersonRepository = MockRepository.StrictMock<IRepository<Person>>(); 

     FakePersonRepository.Expect(action => action.Get(1)).IgnoreArguments().Return(expectedPerson); 

     PersonService PersonService = new PersonService(FakePersonRepository); 
     Person returnedPerson = PersonService.Get(1); 

     Assert.IsNotNull(returnedPerson); 
    } 

    //and inside my person service 
    public class PersonService 
    { 
     private IRepository<Person> _PersonRepository; 
     public PersonService(IRepository<Person> PersonRepository) 
     { 
      this._PersonRepository = PersonRepository; 
     } 

     public Person Get(int Id) 
     { 
      Person p = _PersonRepository.Get(Id); 
      return p; 
      } 
    } 

テストの最後のアサーションは失敗し、返された人は常にnullです。私は私のモックで何か間違ったことをしなければならないことを知っています....アイデア?

答えて

2

ここにお金があります。このシナリオに対してAAA構文とGenerateStubを使用するのが最適です。 AAAの構文とGenerateMockで

var FakePersonRepository = MockRepository.GenerateStub<<IRepository<Person>>(); 
FakePersonRepository.Stub(x => x.Get(1)).Returns(expectedPerson); 

PersonService PersonService = new PersonService(FakePersonRepository); 
Person returnedPerson = PersonService.Get(1); 
6

はあなたの期待に設定行の後

mockRepository.ReplayAll() 

をやってみてください。

2

私はRhinoMocksとスーパー慣れていないよ(私は部品番号を使用してきた)が、できませんでした:私も(あなたがリプレイが必要だと思う

FakePersonRepository.Expect(action => action.Get(1)).IgnoreArguments().Return(expectedPerson); 

FakePersonRepository.Expect(action => action.Get(1)).Return(expectedPerson); 

こと) RMと

+1

うんIgnoreArgumentsは不必要です。そのリプレイは私が行方不明だった。 –

4

他の人からも言われたように、私はあなたが使用しているテストのスタイルでどこかにリプレイが必要だと思います。代わりに、newer AAA Syntaxと、静的なMockRepository.GenerateMock <>()/ MockRepository.GenerateStub <>()メソッドをReplayを必要としないで使用することもできます。

0

あなたもPersonRepositoryが正しいパラメータと正しい回数と呼ばれていることを確認することができます

Person expectedPerson = new Person() { Id = 1, Name="Jon"}; 

MockRepository MockRepository = new MockRepository(); 
var FakePersonRepository = MockRepository.GenerateMock<IRepository<Person>>(); 

FakePersonRepository.Expect(action => action.Get(1)).Return(expectedPerson).Repeat.Once(); 
PersonService PersonService = new PersonService(FakePersonRepository); 
Person returnedPerson = PersonService.Get(1); 

Assert.IsNotNull(returnedPerson); 
FakePersonRepository.VerifyAllExpectations(); 
関連する問題