2012-03-28 31 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[,]找到了解決此限制的方法。

有一個隱式轉換,所以你的接口實現中的代碼應該能夠保持不變。