Я пытаюсь заставить 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());
}
}
В моем модульном тесте я хотел бы проверить, что StaticObj.put вызывается для K и X, когдаони не пустые и не нулевые, поэтому я делаю что-то вроде этого:
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 не справляется с этим хорошо, если я не понимаю.
Спасибо за любые идеи!