2016-07-15 17 views
2

ユニットテストの実行中にメソッドが3回呼び出されます。さまざまなパラメータで呼び出されるたびに最後にメソッドが対応するパラメータで呼び出されたことを確認したい。Mockito、最後に呼び出されたメソッドのパラメータを確認する方法

お願いします。

私の方法:

private void doHandle(Updategram updategram) 
     throws FixtureNotFoundException, DatatypeConfigurationException { 
    BetSyncObject betSyncObject = transformer.transformer(updategram); 
    EventTreeCreation event = betSyncObject.eventTree; 
    if (!event.getEvent().isEmpty()) { 
     Event event2 = event.getEvent().get(0); 
     long timestamp = 
      updategram.getHeader().getTimeStampUtc().toGregorianCalendar().getTimeInMillis(); 
     String sportName = event2.getSportcode(); 
     String id = event2.getExtId(); 
     publisher.publishEvent(PROVIDER_NAME, betSyncObject, sportName, id, timestamp); 
    } else { 
     LOGGER.info("Empty event tree : {}", betSyncObject); 
    } 
    } 

テスト:

@Test 
    public void testCountAndSetResultLine() throws Exception{ 
     EventPublisher eventPublisher = Mockito.mock(EventPublisher.class); 
     BetgeniusService betgeniusService = new BetgeniusService(); 

     BetSyncObject expectedBetSyncObj = transformer.transformer(updategram); 

     ExecutorService service = Executors.newFixedThreadPool(3); 
     handle(betgeniusService, updategramFixture, service); 
     Thread.sleep(50); 
     handle(betgeniusService, updategramMarketSet, service); 
     Thread.sleep(50); 
     handle(betgeniusService, updategramResult, service); 

     service.shutdown(); 
     service.awaitTermination(20000, TimeUnit.MILLISECONDS); 
     betgeniusService.getExecutor().shutdown(); 
     betgeniusService.getExecutor().awaitTermination(20000, TimeUnit.MILLISECONDS); 

     Mockito.verify(eventPublisher, Mockito.times(3)).publishEvent(Mockito.anyString(), Mockito.any(BetSyncObject.class), 
       Mockito.anyString(), Mockito.anyString(), Mockito.anyLong()); 

    } 

この瞬間のためにpublishEvent方法が正確にexpectedBetSyncObjで3回呼び出されていないので、私は、例外を取得しています。これは前回だけ呼び出す必要があります。

最後にexpectedBetSyncObjオブジェクトでpublishEventメソッドが呼び出されたことを確認する方法を教えてください。

答えて

1

これはArgumentCaptorで実現できると思います。 ArgumentCaptorを使用して、作成されたすべての呼び出しの引数を取得し、後でそのそれぞれを検証します。 3番目の呼び出しで、引数(.get(2))が予想されるオブジェクトであることを確認します。

ので

ArgumentCaptor<BetSyncObject> betSyncObjectCaptor = ArgumentCaptor.forClass(BetSyncObject.class); 
Mockito.verify(eventPublisher, Mockito.times(3)).publishEvent(Mockito.anyString(), betSyncObjectCaptor.capture(), Mockito.anyString(), Mockito.anyString(), Mockito.anyLong()); 

List<BetSyncObject> capturedBetSyncObject = betSyncObjectCaptor.getAllValues(); 
assertEquals(expectedBetSyncObj, capturedBetSyncObject.get(2)); 
+0

おかげのようなもの。それが私の必要なものです。 –

+0

** expectedBetSyncObj **とは何ですか? –

関連する問題