2011-12-22 5 views
0

私は、種類を別の種類に変換する専用関数を呼び出すテストメソッドがあります。PrivateObject.Invokeを使用して静的変換関数を呼び出すと、C#でコンパイルされません。

この静的関数は、次のシグネチャがあります。

private static Destiny[] Array2Array<Origin,Destiny> (Origin[] OriginVector) 

それはプライベートな機能なので、テスターはそれにアクセスすることはできませんというエラーを与えます。だから私は、この点になった:

Origin[] OriginVector = null; // TODO: Initialize to an appropriate value 
Destiny[] expected = null; // TODO: Initialize to an appropriate value 
Destiny[] actual; 
var dummy = new ConversionClass(); 
var po = new PrivateObject(dummy, new PrivateType(typeof(ConversionClass))); 
var acessor = new ConversionClassAcessor(po); 

actual = po.Invoke("Array2Array", 
     new [] { typeof(Origin[]), typeof(Destiny[]) }, 
     new object[] { OriginVector }); 

EDITは:最後の行がメッセージでコンパイルエラーをスローする「[]運命に型オブジェクトを変換することはできません」。私は間違っているの?

+0

ここでは何が起こりましたか?シェインさん? –

+0

'Invoke'メソッドの代わりに、アセンブリ属性[' InternalsVisibleTo'](http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx)の使用を検討することができます。あなたのテストをもっときれいにするでしょう。 – Matthias

+0

@MatthiasKoch:質問を解決した人**は彼のアンカーを削除しました(?!?!?!)。しかし属性は素晴らしいです。 –

答えて

0

答えは簡単です。 :D

actual = (Destiny[]) po.Invoke("Array2Array", 
    new [] { typeof(Origin[]), typeof(Destiny[]) }, 
    new object[] { OriginVector }); 
0

Mr Chris Shain、

ここで私があなたに与えた解決策を再現します。あなたがあなたの答えを削除したので、この後に新しい質問を追加すると、私はこれを削除し、あなたの質問を回答の答えとして受け入れます。


上記のコードの問題点はactual変数タイプDestiny[]であり、呼び出しの結果は、System.Objectのであることです。型キャストが必要です:

actual = (Destiny[]) po.Invoke("Array2Array", 
     new [] { typeof(Origin[]), typeof(Destiny[]) }, 
     new object[] { OriginVector }); 
+0

ああ...私はあなたがこのエラーを取得していないと思った!あなたは「それはエラーでコンパイルされない」と言っているからです。:/ – Matthias

+0

それは良い言い方をすることができます、私は同意します: "それは" blabla "エラーメッセージでコンパイルされません。とにかく私はそれを編集し、この時間がより明確になることを期待する;-) –

関連する問題