无法在C#中的PrivateObject中将类型对象隐式转换为字符串

时间:2018-11-02 22:25:48

标签: c# unit-testing

从我读到的内容中,我可以为PrivateObject对象中的参数传递一个对象。该代码在说明中给出了错误。

[TestMethod]
public void TestMethod1()
{
    MessageToSend message = new MessageToSend();
    Sender sender = new Sender(null, null, null);
    var dto = new DateTimeOffset();

    PrivateObject pObj = new PrivateObject(typeof(Sender));

    Object[] args = new Object[] { "Hello", "Marc", "Perry", dto };
    string result = pObj.Invoke("ParseBody", args);
}

错误

  

无法将类型对象隐式转换为字符串

它正在调用的方法是

private string ParseBody(string sBody, string sFirstName, string sLastName, DateTimeOffset? tSourceTimeInfo)

1 个答案:

答案 0 :(得分:5)

PrivateObject.Invoke method接受object[]个参数并返回object,因此它可以应付大多数情况。编译器不信任objectstring,因为虽然在运行时可能是正确的,但对于编译器来说却并非如此。

所以...您需要显式投射:

string result = (string)pObj.Invoke("ParseBody", args);