PowerMockito を使用して静的クラスへの呼び出しをモックしていますが、メソッドにはオブジェクトの配列である引数があります。したがって、呼び出しは次のようになります。
String temp = MyClass.doSomething(MyObject[] objArray1);
しかし、PowerMockito を次のようにモックしようとすると、次のようになります。
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClass.class)
public class TestClass {
@Test
public void myTest {
MyObject[] myObjArray1 = new MyObject[1];
myObjArray1[0] = new MyObject();
PowerMockito.mockStatic(MyClass.class);
PowerMockito.when(MyClass.class, "doSomething", myObjArray1).thenReturn("A String");
...
}
これにより、Eclipseで警告が表示されます。
タイプ MyObject[] の引数は、タイプ PowerMockito からの varargs メソッド when(Class, String, Object...) の呼び出しのために明示的に Object[] にキャストする必要があります。別の方法として、varargs 呼び出しのために Object にキャストすることもできますが、次のように Object にキャストすると、次のようになります。
PowerMockito.when(MyClass.class, "doSomething", (Object) objArray1).thenReturn("A String");
このメソッドの実行時にその文字列が返されていません。これは、オブジェクト型パラメーターが原因でメソッドが認識されないためであると想定しています。
オブジェクトとしてキャストせずに非プリミティブを渡す方法、またはメソッドをキャストで認識させる方法についてのアイデアはありますか?