2011-10-30 21 views
2

一般的な親クラスから継承されたメソッドをモックしようとしています。私のコードはこのように見えます。継承されたメソッドを模擬する方法

public interface IBaseRepository<T> 
{ 
    IEnumerable<T> FindMany(Func<T, bool> condition); 
} 

public interface IPersonRepository : IBaseRepository<person> 
{ 
    //Here I got some specifics methods for person repository 
} 

私のテストコードは次のようになります。

private IPersonRepository mockPersonRepository { get; set; } 

    [TestMethod] 
    public void TestMehtod() 
    { 
     LogonModel model = CreateLogonModel("[email protected]", "test", "Index"); 
     person p = new person() { Email = model.Email, password = model.Password, PersonId = 1 }; 

     mockPersonRepository.Stub(x => x.FindMany(y => y.Email == model.Email && y.password == model.Password)).Return(new List<person> {p}); 
     mockPersonRepository.Replay(); 

     var actual = instanceToTest.LogOnPosted(model) as PartialViewResult; 

     Assert.AreEqual("_Login", actual.ViewName); 
    } 

私は私が私スタブ、doesntの作品、リターン人は常にnullであることをSE 2010対でデバッグツールをすることができます使用しています。私はFindManyメソッドを仮想として宣言しました。

誰かがその方法をスタブする方法を知っていますか?私はRhinoMocksを使っています。

答えて

2

問題は、ラムダを比較しているということです - しかし、あなたは、ラムダに渡さpersonインスタンスは、述語条件を満たすに基づいてpersonオブジェクトに一致を持つことに本当に興味を持っている - あなただけのことで、これを達成するためにMatches()を使用することができますpに述語を実行 - あなたは試合を持っているとスタブリストを返すべきであるよりも、それはtrueに相当場合:

mockPersonRepository.Stub(x => x.FindMany(Arg<Func<person, bool>>.Matches(y => y(p)))) 
        .Return(new List<person> { p }); 
+0

はそれが本当に私を助け、あなたの助けをありがとう!今私はモデルLogonPostedに渡すモデルを実際に使っていることをテストしたい。どうやってやるの?私はそれを次のようにしようとしています: mockPersonRepository.Expect(x => x.FindMany(Arg >。)Matches(y => y(p)))。 しかし、そのようなテストを設定すると、常に緑色になります。どのように私は本当にモデルからのデータでpersonRepositoryを呼び出すことを期待しています。 – Rikard

関連する問題