单元测试用例-MissingMethodException

时间:2018-08-06 09:33:54

标签: c# unit-testing vs-unit-testing-framework

这是将String[]转换为String的方法。

private string ConvertStringArrayToString(System.String[] array)
{

    string result = string.Join("<br />", array);
    return result.ToString();
}

这是上述方法的单元测试用例方法。

[TestMethod] 
public void ConvertStringArrayToString_shouldReturnString()
{
    string returnedString = null;


    PrivateObject o = new PrivateObject(typeof(DemoClass));
    System.String[] array = new System.String[] 
    {
        "Index0","Index0","Index0","Index0"
    };

    returnedString = (string)Convert.ChangeType((o.Invoke("ConvertStringArrayToString", array)), typeof(string));

}

这将导致缺少方法异常。

我发现错误在于传递参数,即string[]

但是当我将方法访问说明符替换为public时,测试用例就可以正常工作了!

请帮助说明为什么方法在privatestring[]时无法访问。

1 个答案:

答案 0 :(得分:2)

我认为问题在于,array是作为object[]参数的参数直接传递的,而您确实希望将其包装起来,因此它只是参数数组中的第一个参数。所以我会这样写:

string[] array = { "Index0", "Index0", "Index0", "Index0" };
object[] args = { array };
var result = o.Invoke("ConvertStringArrayToString", args);
string returnedString = (string) result;

(无需提前声明returnedString,也不需要使用Convert.ChangeType-强制转换就可以了。)