4

キャスト例外が発生します

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のバグだと思いますか?

4

2 に答える 2

4

NSubstituteは、Reflection.Emitに依存するCastleに依存しているため、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

これは少し遅いかもしれませんが、この問題に遭遇し、この質問に出くわした人を助けることができます。

Arrayの代わりにインターフェースを返すことで、この制限を回避する方法を見つけましたobject[,]

暗黙の変換があるため、インターフェースの実装内のコードは同じままである必要があります。

于 2013-08-23T16:17:13.680 に答える