返回多态对象时,Rhino.Mocks会产生InvalidCastException

时间:2010-06-23 15:09:29

标签: .net rhino-mocks

我第一次使用Rhino.Mocks 3.6。我正在尝试为返回继承类型(B)的接口创建存根。当我尝试这样做时,它会生成一个InvalidCastException试图将一些代理对象转换为基类(A)。

例如:

class A {}

class B : A {}

interface IMyInterface
{
    A GetA();
}

// Create a stub
var mocks = new MockRepository();
var stub = mocks.Stub<IMyInterface>();
Expect.Call( stub.GetA() ).Return( new B() );

// This will throw an InvalidCastException
var myA = stub.GetA();

在我看来,问题在于它生成的代理类与现有类没有相同的继承结构。但是,在我看来,返回由方法签名指定的类型的子类似乎是一种相当常见的情况。

我尝试了一些变化,但我无法让它发挥作用。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用mocks.Record设置模拟对象,使用mocks.PlayBack运行测试。

public class A { }

public class B : A { }

public interface IMyInterface
{
    A GetA();
}

[TestFixture]
public class RhinoTestFixture
{
    [Test]
    public void TestStub()
    {
        // Create a stub
        var mocks = new MockRepository();
        IMyInterface stub;
        using (mocks.Record())
        {
            stub = mocks.Stub<IMyInterface>();
            stub.Expect(x => stub.GetA()).Return((new B()));
        }

        using (mocks.Playback())
        {
            var myA = stub.GetA();
            Assert.IsNotNull(myA);
        }
    }
}