나는 테스트 할 필요가있는 다른 쓰레드에서 실행되는이 코드를 가지고있다.Java 8에서 fire-and-forget 요청을 테스트하려면 어떻게합니까?
여기 내 코드가 있습니다.
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> {
String partitionKey = format("partitionKey-%d", random.nextInt(10000));
String pPpageViewStreamName = this.stormConf.get(pPAGEVIEW_STREAMNAME).toString();
PutRecordResult putRecordResult = this.amazonKinesisClient.putRecord(pageViewStreamName,
wrap(gson.toJson(newMap).getBytes()),
partitionKey);
LOG.debug(format("Put Result in shardId %s with data %s: ", putRecordResult.getShardId(), newMap.toString()));
});
하지만 내 테스트가 작동하지 않습니다. 내 테스트는 여기에
FixtureGenerator fixtureGenerator = FixtureGenerator.create(). buildPageViewEvent(); 튜플 튜플 = MockTupleHelpers.mockTuple (fixtureGenerator.toJson());
when(this.random.nextInt(10000)).thenReturn(1000);
PutRecordResult putRecordResult = new PutRecordResult();
putRecordResult.setShardId("shardId");
when(this.amazonKinesisClient.putRecord(any(String.class), any(ByteBuffer.class), any(String.class))).thenReturn(putRecordResult);
bolt.execute(tuple, null);
verify(this.amazonKinesisClient).putRecord(this.captorStreamName.capture(), this.captorData.capture(), this.captorPartitionKey.capture());
assertThat(this.captorStreamName.getValue(), is(equalTo("pageview-ci")));
assertThat(this.captorPartitionKey.getValue(), is(equalTo("partitionKey-1000")));
bolt.execute
은 화재 및 잊어 버리는 코드입니다.
내가 오류가 amazonKinesisClient
가 호출되지 않습니다 때문입니다이
Wanted but not invoked:
amazonKinesisClient.putRecord(
<Capturing argument>,
<Capturing argument>,
<Capturing argument>
);
-> at io.data.bolt.EmitPageViewBoltTest.shouldEmitDataToKinesis(EmitPageViewBoltTest.java:83)
Actually, there were zero interactions with this mock.
Wanted but not invoked:
입니다. Thread.sleep (1000) 시도했지만 작동하지 않습니다. 이 테스트 할