gpt4 book ai didi

java - 如何为ExecutorServices编写测试用例?

转载 作者:行者123 更新时间:2023-12-02 01:40:40 25 4
gpt4 key购买 nike

我有一个使用 ExecutorService 创建和执行多个线程的方法。代码工作正常。现在我想为此编写 JUNIT 测试用例。代码如下:

private void method(Long input1, object result)
{
ExecutorService executor = Executors.newFixedThreadPool(4);
List<Callable< myObject>> callables = Arrays.asList( callables as List);
try
{
List<Future< myObject>> futures = executor.invokeAll(callables);
executor.shutdown();
for(Future< myObject> f : futures)
{
method(f, result);
}
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

我是 JUnit 测试用例的新手。我在互联网上寻找答案,但没有针对我的问题的具体答案。

我需要帮助来编写测试用例,以便它处于 Jacoco 的覆盖范围内。提前致谢。

最佳答案

借助PowerMockito,您可以模拟静态方法:
Executors.newFixedThreadPool

ExecutorService executors = Mockito.mock(ExecutorService.class);
Mockito.when(executors.invokeAll()).thenReturn( <list of futures> );

PowerMockito.mockStatic(Executors.class);
PowerMockito.when(Executors.newFixedThreadPool(anyInt())).thenReturn(executors);

旨在使用包含真实 future (如果可能)的真实列表

(另外不要忘记将正确的类放入 @PrepareForTest 注解中)

<小时/>

这样的测试是否有意义取决于 method(f, result); 正在做什么。如果我们假设它是一个私有(private)方法,则可能没有其他方法来测试/覆盖它。

<小时/>

此外,将任务提交给 ExecutorService 并在阻塞方法中处理结果可能不是一个好主意,所以无论如何都要考虑重构。

关于java - 如何为ExecutorServices编写测试用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57490803/

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