二维对象数组返回类型 - NSubstitute

时间:2012-03-28 17:05:07

标签: c# .net tdd nunit nsubstitute

我得到了施法异常

System.InvalidCastException:无法将类型为'System.Object []'的对象强制转换为'System.Object [,]'。 在Castle.Proxies.ITestProxy.Get2DArray() 在TestTest.cs中的Scratch.TestFixture.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错误?

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:0)

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

我们通过让您的界面返回Array而不是object[,]找到解决此限制的方法。

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