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

我得到一个演员exception

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().Get2DArray().Returns(new object[1,1]); } } public interface ITest { object[,] Get2DArray(); } 

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

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

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

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

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

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

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

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