C# 调用以字符串[]为参数的方法时发生PrivateObject NullReferenceException

C# 调用以字符串[]为参数的方法时发生PrivateObject NullReferenceException,c#,arrays,unit-testing,privateobject.invoke,C#,Arrays,Unit Testing,Privateobject.invoke,我正在尝试使用字符串[]作为参数为私有方法编写单元测试。调用私有方法适用于PrivateObject类,但是当我尝试使用string[]调用它时,它却不起作用 测试返回 System.NullReferenceException:对象引用未设置为对象的实例 在调用时 这是包含我需要调用的方法的类: public class Program{ public Program(){} private void TestCommand(string[] command){} } 我尝

我正在尝试使用
字符串[]
作为参数为私有方法编写单元测试。调用私有方法适用于
PrivateObject
类,但是当我尝试使用
string[]
调用它时,它却不起作用

测试返回

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);

结果证明调用没有什么问题。相反,异常发生在从TestCommand内部调用的方法中。未指定方法中使用的字段。从VisualStudio中收到的错误消息中根本看不出这一点,这使调用方法似乎出现了异常。

您的代码应该按原样工作。你真正的
TestCommand
实际上是做什么的?你说
也不起作用是什么意思?这些是不同的东西,不仅仅是同一事物的不同代码。如果参数列表是
params object[]
,那么调用的两种方法是将参数作为
privateObject.Invoke(“TestCommand”,new string[]{“add”,“rando”})
传递,或者使用
privateObject.Invoke(“TestCommand”,new object[]{new string[]{“add”,“rando”})
。有些情况下需要后者,但我认为您的数组嵌套过度。@SándorMátyásMárton PrivateObject没有TestCommand方法@forsvarir“add rando”会添加一个名为“rando”的动物。该方法称为TestCommand,因为它将测试命令是否有效。我认为方法的内容与问题无关。