Я пытаюсь заставить PowerMock работать с mockito, и я следую документации здесь: http://code.google.com/p/powermock/wiki/MockitoUsage13.
Чтобы упростить бит, скажем, что у меня есть статический метод:
StaticObj.put(String key, String val) { ... }
И тестируемый класс делает что-то вроде этого:
public class ClassToTest {
public void doSomething(Params p) {
if (StringUtils.isNotBlank(p.getK()) StaticObj.put("k1", p.getK());
if (StringUtils.isNotBlank(p.getX()) StaticObj.put("x1", p.getX());
}
}
В моем unit test я хотел бы проверить, что StaticObj.put вызывается для K и X, если они не пусты или null, поэтому я делаю что-то вроде этого:
public void testNormalCase() {
// assume that mocking setup for statics already happened in some @Before function..
Params params = new Params("k", "x");
ClassToTest classToTest = new ClassToTest();
classToTest.doSomething(params);
// now I want to verify:
PowerMockito.verifyStatic(times(1));
StaticObj.put("k1", "k1");
PowerMockito.verifyStatic(times(1));
StaticObj.put("x1", "x");
}
Это работает, и это то, что я ожидаю. Что не работает, если я прокомментирую проверку для K, тогда проверка на X не удалась! Сообщение об ошибке указывает, что ( "x1", "x" ) ожидается, но получится ( "k1", "k" ). Почему это? Не правильно ли это кодирование?
И это заставляет меня думать, что следующий тип теста, который проходит, может пройти по неверной причине:
public void testOtherCase() {
// assume that mocking setup for statics already happened in some @Before function..
Params params = new Params("k", null);
ClassToTest classToTest = new ClassToTest();
classToTest.doSomething();
// now I want to verify:
PowerMockito.verifyStatic(never());
StaticObj.put(eq("x1"), anyString());
}
например. Интересно, видит ли powermock "k1", решает, что "x1" никогда не вызывался и не проходил мимо. (?)
Чтобы указать его в целом, у меня есть статический метод, который называется N раз (где N изменяется в зависимости от входных параметров). И я хочу проверить, что он был вызван в правильных случаях (которые могут быть определены входными параметрами). Кажется, что powermock не справляется с этим, если я не понимаю.
Спасибо за любые идеи!