Я использую jmockit для модульного тестирования (с TestNG), и у меня возникают проблемы с использованием класса 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 требует, чтобы все аргументы использовали совпадение.
Я почти уверен, что это ошибка, или, возможно, невозможно использовать Matchers с примитивными типами (это меня расстроило). Кто-нибудь сталкивался с этой проблемой и знает, как ее обойти?