単体テスト (TestNG を使用) に jmockit を使用していますが、Expectations クラスを使用して、プリミティブ型 (ブール値) をパラメーターとして受け取るメソッドをマッチャーを使用してモックアウトするのに問題があります。この問題を示すサンプル コードを次に示します。
/******************************************************/
import static org.hamcrest.Matchers.is;
import mockit.Expectations;
import org.testng.annotations.Test;
public class PrimitiveMatcherTest {
private MyClass obj;
@Test
public void testPrimitiveMatcher() {
new Expectations(true) {
MyClass c;
{
obj = c;
invokeReturning(c.getFoo(with(is(false))), "bas");
}
};
assert "bas".equals(obj.getFoo(false));
Expectations.assertSatisfied();
}
public static class MyClass {
public String getFoo(boolean arg) {
if (arg) {
return "foo";
} else {
return "bar";
}
}
}
}
/******************************************************/
invokeReturning(...) への呼び出しを含む行は、NullPointerException をスローします。
この呼び出しをマッチャーを使用しないように変更すると、次のようになります。
invokeReturning(c.getFoo(false), "bas");
それはうまく動作します。私の実際のコードでは、実際にマルチパラメーターメソッドをモックしていて、別の引数でマッチャーを使用する必要があるため、これは私にとっては良くありません。この場合、Expectations クラスでは、すべての引数がマッチャーを使用する必要があります。
これはバグであると確信しています。または、プリミティブ型でマッチャーを使用できない可能性があります (それは悲しいことです)。誰かがこの問題に遭遇し、それを回避する方法を知っていますか?