gpt4 book ai didi

java - Controller 的 Spring Boot 测试 @WebMvcTest 似乎在上下文中加载其他 Controller

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:34 25 4
gpt4 key购买 nike

这是我的 Spring Controller 测试用例

@RunWith(SpringRunner.class)
@WebMvcTest(value = MyController.class)
public class MyControllerTest {

@MockBean
private MyService myService;
}

所以这是专门针对MyController中方法的单元测试。但是当我运行测试时,Spring 似乎开始实例化 OtherController 及其所有依赖项。

我已经尝试将上面的内容更新为

@RunWith(SpringRunner.class)
@WebMvcTest(value = MyController.class, excludeFilters = @ComponentScan.Filter(value= OtherController.class, type = FilterType.ANNOTATION))


public class MyControllerTest {

...
}

但 Spring 似乎仍然连接着它。这是 Spring 在我专门运行上述测试时尝试实例化 OtherController 时抛出的错误。

2017-01-06 12:09:46.207  WARN 18092 --- [           main] o.s.w.c.s.GenericWebApplicationContext   : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'otherController' defined in file [C:\..OtherController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'getOtherService' defined in com.my.myApplication: Unsatisfied dependency expressed through method 'getOtherService' parameter 0org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'getOtherService' defined in com.myOrg.MyServiceApplication: Unsatisfied dependency expressed through method 'getPositionService' parameter 0

这可能是什么原因造成的?

最佳答案

很可能是您通过 @Componentscan 或类似的东西意外触发了 bean 扫描。

例如,如 this answer 中所述,Spring 可能正在检测您的“生产”@SpringBootApplication Application 类,以及它带来的所有组件扫描。如果是这样,请确保您用“测试”一次放置“覆盖”您的“生产”应用程序类......

@SpringBootApplication
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}

...在将覆盖“生产”应用程序的位置。

例如,如果您的 IDE 没有被类名冲突弄得一团糟:

"production" -> src/main/java/com/mycompany/Application.java
-> src/main/java/com/mycompany/controllers/MyController.java
"test" -> src/test/java/com/mycompany/Application.java
-> src/test/java/com/mycompany/controllers/MyControllerTest.java

作为替代方案,我还发现在我的情况下这也适用(即将应用程序放在测试 Controller 文件夹中)

"production" -> src/main/java/com/mycompany/Application.java
-> src/main/java/com/mycompany/controllers/MyController.java
"test" -> src/test/java/com/mycompany/controllers/Application.java
-> src/test/java/com/mycompany/controllers/MyControllerTest.java

关于java - Controller 的 Spring Boot 测试 @WebMvcTest 似乎在上下文中加载其他 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41512074/

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