2016-06-08 7 views
1

У меня есть метод, который выглядит, как это (упрощение)Проверьте метод недействительным был назван в частном методе с EasyMock/PowerMock

private boolean x = someMethodToSetTheValueOfX(); 

private void method(args){ 
     if(x){ 
      method1(); 
     }else{ 
      method2(); 
     } 
} 

Я хочу написать модульный тест, чтобы гарантировать, что, когда х верно, вызывается метод1. Я знаю, что могу использовать Whitebox PowerMock для установки значения x и вызова метода, но как я могу подтвердить, что был вызван метод1()? Обратите внимание, что метод1() недействителен.

Мне не разрешено использовать другую фреймворк (например, Mockito), кроме EasyMock/PowerMock.

+0

Только в случае : дайте мне знать, если вам нужна дополнительная информация, чтобы найти мой ответ полезным; в противном случае не забудьте о принятии ответов ;-) – GhostCat

ответ

1

Вы получаете это неправильно; это не то, как вы должны разрабатывать свои тесты.

Прежде всего: пожалуйста, не используйте никакие рамки PowerMock .... Они полагаются на манипуляции с байтовым кодом; и рано или поздно это вызывает неприятности. Поверьте мне, я потратил много часов на поиски действительно странных ошибок без уважительных причин.

Тогда: не проверяйте свой код таким образом!

Вы используете насмешливую структуру для создания/управления теми объектами, которые вы передаете в свой «класс под тестом». Вы не используете фреймворк, чтобы непосредственно протестировать свой «тест класса»! Более конкретно: вы не хотите писать тестовый код, который знает о частных методах - это детали реализации.

Что вы делаете вместо этого:

а), как говорится, вы можете использовать насмешливый передавать объекты в классе под испытанием. И тогда вы можете контролировать/проверять, что эти издевательства видят вызовы, которые вы ожидаете от своего «теста класса». Итак, в худшем случае вы можете поместить метод1/2 на другой объект; и затем вы можете использовать mock/verify, чтобы проверить, были ли они вызваны как ожидалось.

b) вы создаете объекты своего «теста класса» ... и затем «утверждаете» свойства этих объектов; или по результатам, которые метод вызывает возврат.

+0

Также не следует, что с помощью PowerMock вы меняете тестируемый блок. Таким образом, вы фактически не проверяете свой класс под тестом, а то, что не будет видно на производстве. – SpaceTrucker

1

Вы можете использовать:

System.out.println("method one was called"); 

Если вы можете печатать на Consol в IDE, как затмение, или использование:

JOptionPane.showMessageDialogue(null, "method one was called"); 

И поместить их в method1

+0

Я думаю, вы неправильно поняли вопрос. Речь идет об модульном тестировании (например, тестах JUnit). Не об устранении неполадок. Но в противном случае да, я бы сделал первый :) – Steve

 Смежные вопросы

  • Нет связанных вопросов^_^