如何修复Spock/Groovy中Java Lambda调用始终返回null的测试用例?
问题解决方法
你的测试用例中,Java Lambda的写法本身没有语法错误,但可以通过调整写法和移除冗余操作,确保测试用例执行通过:
方式一:简化Lambda表达式
当Lambda体只有单条返回语句时,可省略大括号和return关键字,Groovy对这种简化写法的类型兼容性更好:
def 'test of java lambda' () { given: Callable<String> working = () -> "working" and: def executor = Executors.newFixedThreadPool(2) when: def result = executor.submit(working) then: result.get() != null }
方式二:移除冗余的线程等待
Future.get()是阻塞方法,会自动等待任务执行完成后返回结果,无需额外调用Thread.sleep(1000),移除后逻辑更清晰:
def 'test of java lambda' () { given: Callable<String> working = () -> { return "working" } and: def executor = Executors.newFixedThreadPool(2) when: def result = executor.submit(working) then: result.get() != null }
额外检查
若仍有问题,请确认已正确导入并发相关类:
import java.util.concurrent.Callable import java.util.concurrent.Executors
内容的提问来源于stack exchange,提问作者Krzysztof
相关产品推荐
相关产品推荐

