4

我得到一个演员表异常

System.InvalidCastException:无法将“System.Object[]”类型的对象转换为“System.Object[,]”类型。在 TestTest.cs 中的 Scratch.TestFixture.Get2DArray() 的 Castle.Proxies.ITestProxy.Get2DArray():第 17 行

从以下:

[TestFixture]
public class TestFixture
{
    [Test]
    public void Get2DArray()
    {
        Substitute.For<ITest>().Get2DArray().Returns(new object[1,1]);
    }
}

public interface ITest
{
    object[,] Get2DArray();
}

任何人都可以对此有所了解吗?我认为这是一个NSubstitute错误?

4

2 回答 2

4

NSubstitute 依赖于 Castle,Castle 依赖于 Reflection.Emit,所以他们责怪 Reflection.Emit。

http://issues.castleproject.org/issue/DYNPROXY-154

对于您的问题的解决方法,看起来您不能使用多维数组。请注意,您的异常实际上发生在Get2DArray(),而不是Returns

请注意,就我个人而言,我正在开发一个不使用 Reflection.Emit(也没有 Castle)的模拟框架。即使 Alpha 准备好也需要几周时间,但它是一个非常强大的工具。有很多我没有失败的Castle失败的场景(我的网站会列出这些)。如果您有兴趣,请关注http://smug.codeplex.com

于 2012-03-28T20:52:51.863 回答
0

这可能有点晚了,但可以帮助遇到此问题并遇到此问题的人。

我们通过让您的 Interface 返回Array而不是object[,].

存在隐式转换,因此接口实现中的代码应该能够保持不变。

于 2013-08-23T16:17:13.680 回答