【问题标题】:Wanted but not invoked. Actually, there were zero interactions with this mock. Kinesis.Worker AWS想要但没有被调用。实际上,与此模拟的交互为零。 Kinesis.Worker AWS
【发布时间】:2022-01-15 10:46:58
【问题描述】:

我已经尝试了几种方法来解决这个异常。这是我从未工作过的应用程序中的现有测试。

 import com.amazonaws.services.kinesis.clientlibrary.lib.worker.KinesisClientLibConfiguration;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker;

@ExtendWith(MockitoExtension.class)
class TeamEventStreamWorkerTest {
    @Mock
    Worker worker;

    @Mock
    KinesisClientLibConfiguration kinesisClientLibConfiguration;

    @Test
    void onApplicationEvent() throws InterruptedException {
        TeamEventStreamWorker teamEventStreamWorker = new TeamEventStreamWorker(null, null, null, kinesisClientLibConfiguration, null) {
            Worker createDynamoDbStreamsWorker() {
                return worker;
            }
        };

        doNothing().when(worker).run();

        teamEventStreamWorker.onApplicationEvent(null);

        // Wait to make sure worker run is called by the async mechanism
        Thread.sleep(1000);

        verify(worker).run();

    }
}

我知道问题出在 worker.run() 方法上。 worker 和 kinesis object 是来自 amazon 的 Kinesis 库的对象。

注意:最奇怪的是,当我在本地机器(IntelliJ)上测试时完美运行,但是当我进行推送并且 Jenkins 作业开始尝试时,总是返回相同的错误。

【问题讨论】:

    标签: java amazon-web-services mocking mockito amazon-kinesis


    【解决方案1】:

    您收到的异常消息告诉您在您的测试中从未调用过worker.run() 方法。您可以更改增加睡眠时间的设置。只要至少调用一次worker.run(),测试就会通过。

    【讨论】:

    • 谢谢谢尔盖。我尝试将睡眠时间增加到 5 秒,错误是一样的。
    • 那你需要一步步调试,找出为什么没有调用该方法。
    • 或者不使用睡眠,而是使用一个名为 Awaitility 的库来避免不必要的睡眠。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多