gpt4 book ai didi

java - 如何为具有多个可调用语句的执行器服务编写 Junit 测试用例

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

因此,在我的服务层中,我有一个公共(public)方法调用一个私有(private)方法(JUnit 中将涵盖的方法),该方法又调用其他私有(private)方法进行某些计算。我需要为此方法编写 JUnit。

模拟可调用对象没有帮助

private void Method1(Long num, Map<String,Object> result){
ExecutorService es = Executors.newFixedhreadPool(3);
List<Callable<SomeVo> callables = Array.asList(
getCallable(this::method1,num),
getCallable(this::method2,num),
getCallable(this.method3,num));

try{
List<Future<SomeVo> futures = es.involeAll();
executor.shutdown();

for(Future<Somevo> f : futures){
somemethod(f,result);
}
} catch (InteruptedException e) { }

private SomeVo method1(Long num){
return someVo;
}

private void somemethod(Future<SomeVo> f ,Map<String,Object> res){
result.put("key", f.get());
}

最佳答案

只需稍微重构一下代码,将 Method1 提取到某种接口(interface)/抽象类,并提供一个 callables 列表作为方法参数(只需使用依赖注入(inject)模式)。然后在您的公共(public)方法中,您可以使用该接口(interface)的一些私有(private)实现。

这样您就可以提供一组模拟/测试实现并查看它们是否被调用

我的意思是(将此代码视为伪代码示例,您应该专注于此处的重构以使其正确)是

public abstract class ResultProcessor {
public void processResults(Long num, Map<String,Object> result, List<Callable<SomeVo> callables){
// ...
}
}

// then in the class of your public method create private implementation

...

public void yourPublicMethod() {
// instead of calling Method1(num, result)
new Method1Processor().processResults(num, result);
}

private static class Method1Processor extends ResultProcessor {
public void processResults(Long num, Map<String,Object> result, List<Callable<SomeVo> callables){
List<Callable<SomeVo> callables = Array.asList(
getCallable(this::method1,num),
getCallable(this::method2,num),
getCallable(this.method3,num));

super.processResults(num, result, callables);
}

private SomeVo method1(Long num){
return someVo; // yes you still have access to fields of parent class :)
}
private void somemethod(Future<SomeVo> f ,Map<String,Object> res){
result.put("key", f.get()); // here is the same
}
}

现在您可以轻松提供自己的实现来测试 ResultProcessor 逻辑

关于java - 如何为具有多个可调用语句的执行器服务编写 Junit 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57326440/

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