Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Springboot集成测试-不需要的模拟_Java_Spring_Spring Boot - Fatal编程技术网

Java Springboot集成测试-不需要的模拟

Java Springboot集成测试-不需要的模拟,java,spring,spring-boot,Java,Spring,Spring Boot,我正在尝试为SpringBoot应用程序编写集成测试。代码如下所示 @RunWith(SpringRunner.class) @SpringBootTest(classes = {Application.class, MyTestConfig.class}) @ActiveProfile("test") class MyIntegrationTest { @Autowire ServiceInterface serviceA; } 我注意到applicationContext将一些服务be

我正在尝试为SpringBoot应用程序编写集成测试。代码如下所示

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {Application.class, MyTestConfig.class})
@ActiveProfile("test")
class MyIntegrationTest {

@Autowire
ServiceInterface serviceA;

}
我注意到applicationContext将一些服务bean作为Mockito mocked对象加载,这实际上违背了集成测试的目的,因为它不执行一些代码。有人能告诉我这里可能出了什么问题吗。请注意,有些服务被正确地自动连接,但有些被模拟。我看不出它们行为不同的任何逻辑原因,因为它们是以相同的方式实现的。我使用的是spring boot 2.0.3

已经试过了


已删除MyTestConfig.class,但问题仍然存在。即使我使用@SpringBootTest(classes={Application.class,MyProblematicsServiceImpl.class}),它仍然会在自动连接的地方返回模拟对象。MyProblematicServiceImpl是用@Service注释的空类

查看,如果您将SpringBootTest注释上的webEnvironment设置设置为默认设置,而不是MOCK,那么它将启动一个真正的web环境。

从注释中升级,因此答案是肯定的

应用程序将导致组件扫描,这将拾取您拥有的测试配置。您可能必须排除某些测试配置


Spring Boot提供了@TestConfiguration来解决这个问题。

您必须检查Application.class和MyTestConfig.class,看看Mockito模拟了哪些bean。如果存在mockito mock,那是因为集成测试不想执行真正的服务。假设mockito mock正在避免运行第三方服务的测试。。。所以对于那个特殊的测试,你可以避免那个,继续。有些集成测试只是想测试你的应用程序,而不涉及其他公司的服务。这是同一个内部服务,我不明白为什么spring boot测试默认会模拟它。如果我想模拟任何bean,我会使用@MockBean。我很难理解为什么有些课程被嘲笑,而不是所有课程。如何让spring引导避免模拟服务MyTestConfig类是什么样子的?SpringBootTest确实支持模拟服务,但它们必须被注释为MockBean,除非Spring中出现了严重错误。我删除了MyTestConfig.class,但问题仍然存在。MyTestConfig类支持存根实现,它只有一个bean。我遇到的问题不是针对同一个豆子。即使我使用@SpringBootTest(classes={Application.class,MyProblematicsServiceImpl.class}),它仍然会在自动连接的地方返回模拟对象。MyProblematicServiceImpl是用@Service注释的空类。我猜应用程序会导致组件扫描,这将获取您拥有的测试配置。您可能需要排除一些测试配置。我注意到,在doc中,但使用NONE不起作用。我不想在web环境中运行,这是一种独立的应用程序测试配置,因为集成和单元测试都可以扫描相同的配置。我将调整为不使用内部类进行testconfiguration,因为它隐藏了手动检查的内容