2016-04-11 6 views
-1

パラメータとしてstring[]を持つプライベートメソッドの単体テストを作成しようとしています。プライベートメソッドを呼び出すのは、PrivateObjectクラスで動作しますが、string[]で呼び出しようとしたときにプライベートメソッドを呼び出せませんでした。オブジェクト参照の呼び出しにPrivateObject NullReferenceExceptionは、パラメータとして文字列[]を使用しています。

オブジェクトのインスタンスに設定されていない:

試験は

System.NullReferenceExceptionを返します。

これは私が呼び出す必要があるメソッドを含むクラスです。

public class Program{ 
    public Program(){} 

    private void TestCommand(string[] command){} 
} 

私は次のことを試してみました:

Program program = new Program(); 
PrivateObject privateObject = new PrivateObject(program); 

object[] parameters = new object[1] { 
    new string[2] { 
     "add", 
     "rando" 
    } 
}; 

/* doesn't work either 
object[][] parameters = new object[1][]; 
parameters[0] = new string[2]; 

parameters[0][0] = "add"; 
parameters[0][1] = "rando";*/ 

privateObject.Invoke("TestCommand", parameters); 
+0

コードはそのまま動作するはずです。本当の 'TestCommand'は実際に何をしていますか? – forsvarir

+0

「どちらもうまくいかない」とはどういう意味ですか?それらは異なるものであり、同じものの異なるコードだけではありません。 – Toxantron

+0

パラメータリストが 'params object []'である場合、呼び出す2つの方法は、paramを 'privateObject.Invoke(" TestCommand "、新しい文字列[] {" add "、" rando "})'またはprivateObject.Invoke( "TestCommand"、新しいオブジェクト[] {新しい文字列[] {"add"、 "rando"}}) 'を使用します。後者が必要な場合がありますが、配列をオーバーネストしていると思います。 –

答えて

0

は、呼び出しは何も問題はありませんでしたが判明。代わりに、例外はTestCommand内から呼び出されたメソッドで発生しました。メソッドで使用されているフィールドは割り当てられていません。これはVisual Studioで受け取ったエラーメッセージから明白ではなく、Invokeメソッドの例外のように見えました。

関連する問題