【发布时间】:2018-04-07 01:52:36
【问题描述】:
我有这段代码,它是在我需要测试的另一个线程上运行的即发即弃的。
这是我的代码。
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 是触发后忘记的代码。
我得到的错误是这样的
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:
这是因为amazonKinesisClient 从未被调用过。我试过 Thread.sleep(1000) 但它也不起作用。
【问题讨论】:
标签: java multithreading junit java.util.concurrent