如何用Rhino Mock模拟一个未实现的方法?

时间:2012-02-10 13:58:30

标签: c# unit-testing mocking rhino-mocks rhino

我有这个简化的实现和下面的单元测试:

public class Parent
{
    public virtual int GetSomeValue()
    {
        throw new NotImplementedException();
    }
}

public class Child
{
    public Parent MyParent { get; set; }

    public virtual Parent GetParent()
    {
        return MyParent;
    }

    public virtual int GetParentsValue()
    {
        var parent = GetParent();

        return parent.GetSomeValue();
    }
}

如何在不实现父级的GetSomeValue()方法的情况下使用Rhino Mock测试GetParentsValue()方法?

谢谢!

2 个答案:

答案 0 :(得分:2)

你可以这样做:

Child target = new Child();

Parent mockParent = MockRepository.GenerateStub<Parent>();
mockParent.Stub(x => x.GetSomeValue()).Return(1);

target.MyParent = mockParent;

int value = target.GetParentsValue();

Assert.AreEqual(value, 1);

答案 1 :(得分:1)

您可以使用此代码:

Child child = MockRepository.GenerateStrictMock<Child>();
child.Stub(c => c.GetParentsValue()).Return(1);

Assert.AreEqual(1, child.GetParentsValue());

如果你想测试GetParentsValue()方法的一些内部结构,你应该使用以下方法模拟Parent.GetSomeValue()

Parent mockParent = MockRepository.GenerateStub<Parent>();
mockParent.Stub(x => x.GetSomeValue()).Return(1);

target.MyParent = mockParent;