gpt4 book ai didi

java - Junit 测试在我的异步线程上挂起

转载 作者:行者123 更新时间:2023-12-03 12:47:18 24 4
gpt4 key购买 nike

我在服务的@Postconstruct 方法上创建了一个新线程,在新线程中,无限循环正在运行。

我的测试只是使用 spring mvc 测试调用服务:

ResultActions result = this.mockMvc.perform(post("/test").with(httpBasic(user, pwd)).contentType("application/json").content(test))
.andDo(MockMvcResultHandlers.print())
.andExpect(status().isOk());

测试就卡在那里,等待无限循环线程停止。但是当服务正常启动的时候,测试是没问题的。知道为什么吗?以及如何修复它。

这是我的服务 java 中的代码:

@Postconstruct
private void init() {
invoke();
}

private void invoke() {

Runnable task = () -> {
while(true) { ... }
}
Thread t;
for(int i=0; i<3; i++) {
t = new Thread(task);
t.setName("test-" + i);
t.start();
}
}

最佳答案

建议:停止使用“裸机”线程。有很好的抽象概念,比如 ExecutorService以及 Futures 和 Promises 之类的东西。

重点是:可以使用依赖注入(inject)为生产代码提供这样的ExecutorService;然后你可以定义你自己的 service ...在相同线程上执行所有操作。

意思是:避免处理多线程的单元测试——因为这通常会导致额外的等待,或者“不稳定”,因为您现在不知道您的测试将运行多长时间。

关于java - Junit 测试在我的异步线程上挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43107903/

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