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,因为它将测试命令是否有效。我认为方法的内容与问题无关。