У меня есть метод, на котором я хотел бы запустить тест JUnit. Я издеваюсь над страницей cq5, используя JMockit.
Мой метод тестирования выглядит так
@Mocked
Page page;
@Mocked
PageManager pageManager;
Tag testTag = pageManager.createTag("someID","someTitle","someDescription");//i've left out the try catch for brevety
System.out.println(testTag.getTitle()); // always null here
public void testSomeMethod() {
new Expectations() {
// variables declared here are mocked by default
{
page.getProperties();
propertyMap.put("cq:tags", testTag);
returns(new ValueMapDecorator(propertyMap));
}
};
String propertyValue = methodToBeTested(page);
Assert.assertEquals(propertyValue, "someTitle");
}
И фактический тестируемый метод делает это: -
public static String getTopic(Page page) {
String topic = null;
Tag[] tags = page.getTags();
System.out.println(tags.size()); // returns 0 when I run the test.
for (int i = 0; i < tags.length; i++) {
Tag tag = tags[i];
topic = tag.getTitle();
}
}
return topic;
}
Это всегда возвращает null
, когда я запускаю тест; однако тестируемый метод работает корректно в реальном сценарии.
Я подозреваю, что неправильно устанавливаю/издеваюсь над PageManager
, и, следовательно, мой testTag
равен null
Как мне правильно издеваться над этим, чтобы получить результат, который я ищу?
page.getTags()
, но для него не зафиксировано ожидание; вместо этого тест записываетpage.getProperties()
, который никогда не вызывается из методаgetTopic(Page)
; поэтому он возвращает null, т. е. тест не согласуется с тем, что делает тестируемый метод. - person Rogério   schedule 09.05.2015Page
. Я не пробовал это с тегами, хотя. - person toniedzwiedz   schedule 11.06.2015