2012-03-28 50 views
4

我得到一个转换异常二维对象数组返回类型 - NSubstitute

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

+0

您使用的是哪个版本的NSubstitute? – payo 2012-03-28 19:09:59

+0

我现在远离我的工作站,所以无法检查,但今天下午我通过NuGet安装,如果有帮助的话。 – 2012-03-28 19:53:06

+0

@MylesMcDonnell:MS声称在.NET 4中修复了SRE错误。 – leppie 2012-03-29 09:35:35

回答

4

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

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

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

请注意,我个人正在研究一个不使用Reflection.Emit(也不是Castle)的模拟框架,即使Alpha已经准备好也需要几个星期的时间,但它是相当的功能强大的工具。有许多情况下,城堡失败,我没有(我的网站将列出这些)。如果你有兴趣,请按照http://smug.codeplex.com

+0

太棒了,会做,谢谢。 – 2012-03-29 07:59:02

0

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

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

有一个隐式转换,所以你的接口实现中的代码应该能够保持不变。