0

我有一个测试方法,我调用一个将一种转换为另一种的私有函数。

此静态函数具有以下签名:

private static Destiny[] Array2Array<Origin,Destiny> (Origin[] OriginVector)

由于它是一个私有函数,测试人员会给出一个错误,说它无法访问它。所以我到了这一点:

Origin[] OriginVector = null; // TODO: Initialize to an appropriate value
Destiny[] expected = null; // TODO: Initialize to an appropriate value
Destiny[] actual;
var dummy = new ConversionClass();
var po = new PrivateObject( dummy, new PrivateType(typeof(ConversionClass)));
var acessor = new ConversionClassAcessor(po);

actual = po.Invoke("Array2Array", 
         new [] { typeof(Origin[]), typeof(Destiny[]) }, 
         new object[] { OriginVector } );

编辑:最后一行会引发编译器错误,并显示消息“无法将类型对象转换为 Destiny []”。我做错了什么?

4

2 回答 2

0

克里斯·肖恩先生,

我将在这里重现您给我的解决方案。由于您删除了答案,如果您在此之后添加新答案,我将删除此答案并接受您的答案作为问题的答案。


上面代码的问题是actual变量是类型Destiny[],而 Invoke 的结果是System.Object。需要类型转换:

actual = (Destiny[]) po.Invoke("Array2Array", 
         new [] { typeof(Origin[]), typeof(Destiny[]) }, 
         new object[] { OriginVector } );
于 2011-12-22T22:04:01.120 回答
0

答案很简单..投它。:D

actual = (Destiny[]) po.Invoke("Array2Array", 
     new [] { typeof(Origin[]), typeof(Destiny[]) }, 
     new object[] { OriginVector } );
于 2011-12-22T22:10:15.317 回答