C# 如何模拟继承的方法

C# 如何模拟继承的方法,c#,model-view-controller,unit-testing,rhino-mocks,C#,Model View Controller,Unit Testing,Rhino Mocks,我试图模拟一个从泛型父类继承的方法。好的,我知道我的代码是这样的 public interface IBaseRepository<T> { IEnumerable<T> FindMany(Func<T, bool> condition); } public interface IPersonRepository : IBaseRepository<person> { //Here I got some specifics met

我试图模拟一个从泛型父类继承的方法。好的,我知道我的代码是这样的

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
}
公共接口IBaseRepository
{
IEnumerable FindMany(Func条件);
}
公共接口IPersonRepository:IBaseRepository
{
//这里我得到了一些用于person存储库的具体方法
}
我的测试代码如下所示

    private IPersonRepository mockPersonRepository { get; set; }

    [TestMethod]
    public void TestMehtod()
    {
        LogonModel model = CreateLogonModel("test@test.com", "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);
    }
private IPersonRepository mockPersonRepository{get;set;}
[测试方法]
公共无效测试方法()
{
LogonModel模型=CreateLogonModel(“test@test.com“,”测试“,”索引“);
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(新列表{p});
mockPersonRepository.Replay();
var actual=instanceToTest.LogOnPosted(模型)作为PartialViewResult;
Assert.AreEqual(“_Login”,actual.ViewName);
}
当我在VS2010中使用调试工具时,我可以确定我的存根不起作用,返回的人总是空的。我已将FindMany方法声明为虚拟


有人知道怎么用那种方法吗?我正在使用Rhinomock。

问题是您正在比较lambda-但是您真正感兴趣的是将
person
实例传递到lambda中,在满足谓词条件的基础上匹配您的
person
对象-您可以使用
Matches()
要实现这一点,只需执行
p
上的谓词-如果这等于
true
,则您有一个匹配项,并应返回存根列表:

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

谢谢你的帮助,它真的帮助了我!现在我想测试我是否真的使用了传递给LogonPosted方法的模型。我该怎么做?我一直在尝试这样做:mockPersonRepository.Expect(x=>x.FindMany(Arg.Matches(y=>y(p))).Return();但是如果我这样设置我的测试,它总是变绿的。我如何期望我使用模型中的数据调用personRepository。