gpt4 book ai didi

java - 如何正确测试这种定时并发处理服务呢?

转载 作者:行者123 更新时间:2023-11-30 08:09:11 25 4
gpt4 key购买 nike

我有一个服务,用于模拟 IoT 硬件组件,该组件定期向 SOAP 端点发送数据:

private static final int DEFAULT_CHUNK_SIZE_IN_BYTES = 100 * 1024;

public void simulate(final int samplingFrequencyMs, final int uploadFrequencyMs) {
// ...

此方法每次 samplingFrequencyMs 都会生成一个 JSON 对象随着时间的流逝,每次都会调用 SOAP 端点 uploadFrequencyMs随着时间的推移,生成的数据被分成 DEFAULT_CHUNK_SIZE_IN_BYTES大小块。

例如,如果 samplingFrequencyMs500uploadFrequencyMs1000那么此方法将每秒向 SOAP 端点发送 2 个生成的 JSON 字符串,如果 2 个 JSON 字符串的大小为 200 Kbyte,则它将发送 2 个 block 。

还有一种停止模拟的方法:

public void stopSimulation() {
// ...

我已经为此模拟器编写了测试:

@Test
public void shouldSendProperAmountOfChunksWhenInvokingSimulate() throws InterruptedException
{
// ...

// when
underTest.simulate(100, 500);
Thread.sleep(750);

underTest.stopSimulation();

Thread.sleep(500);

// then
verify(requestServiceMock, times(EXPECTED_REQUEST_CALL_TIMES)).doRequest(uploadBinary, header);
}

但是此测试在 100 次中失败 1-2 次,因为未调用服务 EXPECTED_REQUEST_CALL_TIMES次,所以不稳定。当我必须验证调用方法的次数但涉及计时时,如何测试这一点?我用过750因为它在500之间和1000我认为这应该可以解决问题,但我认为对于这种情况必须有一些测试最佳实践。

最佳答案

您需要做的就是从 CUT 中抽象出系统时间的概念。典型的方法是注入(inject)一个您可以控制的Clock对象。您的实际实现将委托(delegate)给系统时钟,但在测试中您可以精确控制正在发生的事情。

关于java - 如何正确测试这种定时并发处理服务呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30667124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com