2016-11-08 3 views
-1

Это моя первая попытка использования EasyMock. Таким образом, я пытался издеваться в void метод:Mocking a Void method

protected void onStop() { 
    logger.info("Stopping ReporterService."); 

    if (reporter != null) { 
     reporter.stop(); 
     reporter = null; 
    } 
} 

я следовал несколько учебников в Интернете, и я написал это:

ReporterService reporterService1 = EasyMock.createMock(ReporterService.class); 

reporterService1.onStop(); 
EasyMock.expectLastCall().once(); 
replay(reporterService1); 

//EasyMock.replay(reporterService1); 
assertNull(Whitebox.getInternalState(reporterService1, "reporter")); 
EasyMock.verify(reporterService1); 

Но потом я получил это:

java.lang.AssertionError:
Expectation failure on verify:
ReporterService.onStop(): expected: 1, actual: 0

Я искал в Интернете, но я понятия не имею, почему он это говорит. Цените помощь.

Кроме того, только ради понимания, я проверил это вручную, и это работает, я просто хочу, чтобы проверить его с помощью EasyMock:

ReporterService reporterService = new ReporterService(); 
Reporter reporter = new Reporter(null,null,null); 

Whitebox.setInternalState(reporterService , "reporter", reporter); 
assertNotNull(Whitebox.getInternalState(reporterService, "reporter")); 

reporterService.onStop(); 
assertNull(Whitebox.getInternalState(reporterService, "reporter")); 
+1

Непонятно, что вы на самом деле пытаетесь проверить. Вы проверяете, что репортер остановлен? Если это так, вы должны издеваться над репортером. – chrylis

+1

На первый взгляд ваш тестовый код выглядит хорошо. Таким образом, следующее, что нужно посмотреть ... это то, чего не хватает в вашем вопросе: тестируемый код. Даже если вы уверены, что Whitebox.getInternalState() ... должен вызывать onStop в своем аргументе ... вам лучше разместить этот код здесь (см. Http://stackoverflow.com/help/mcve). Без этого мы не можем помочь! – GhostCat

ответ

-1

Я думаю, что это должно решить проблему. 1.Вы должны сначала установить объект-репортер, используя setInternelState 2. Ваш метод ожидает вызова reporter.stop(), поэтому ваш тест должен ожидать этого метода.

Посмотрите на приведенный ниже код. Вы можете добавить свои утверждения в конец.

ReporterService reporterService1 = EasyMock.createMock(ReporterService.class); 
Reporter reporter = EasyMock.createMock(Reporter.class); 

Whitebox.setInternalState(reporterService , "reporter", reporter); 
reporter.onStop(); 
PowerMock.expectLastCall(); 

EasyMock.replay(reporterService1,reporter); 

reporterService1.onStop(); 

EasyMock.verify(reporterService1,reporter); 
+1

Вам не нужен PowerMock, чтобы высмеивать недействительные методы. Кроме того, вам не нужно 'expectLastCall()', которые существуют в EasyMock, но не являются обязательными. Я также призываю вас использовать статический импорт. Вы получите 'reporter.onStop(); replay (reporterService1, репортер); ' – Henri