如何将TestConfiguration放入抽象类中?

3
我有一些Spring测试,它们都定义了相同的测试配置:
    @TestConfiguration
    public static class TestConfig {
        @Bean
        public EmployeeClient employeeClient(MockMvc mockMvc) {
            return new EmployeeClient(mockMvc);
        }
    }

为了减少重复,我将那段代码放入了一个抽象类中,并让每个测试都继承该抽象类。然而,这导致了Spring未解决的依赖项——它无法解析EmployeeClient

我该如何解决这个问题?

1个回答

2

其中一种方法是让您的测试类使用多个配置文件。

@Configuration
class CommonBeans {
}

@Configuration
class SpecificBeans {
}

@ContextConfiguration(classes = {CommonBeans.class, SpecificBeans.class}) 
public class MyAppTest {
  ------
}

如果您在测试包中使用@TestConfiguration而不是@Configuration创建配置,则必须使用@Import注释才能使用该配置。

@TestConfiguration
public class TestBeans {
    
}

@Import(TestBeans.class)
public class MyAppTest {
      ------
}

谢谢,导入成功了。不过,我应该使用@Configuration而不是@TestConfiguration吗? - jd96
完全取决于您的需求,只需理解它们之间的区别并做出决定。如果您的任何类都使用@SpringBootTest进行注释,则它将自动扫描并为所有Configuration类创建bean,但您必须显式地导入TestConfiguration。您可以通过谷歌进一步了解。 - SauriBabu
导入配置与Spring自动检测TestConfiguration的工作方式不同。(例如,当使用命名bean时,使用import会抱怨已经定义了相同名称的bean,但是TestConfiguration只是覆盖了已经定义的配置,而不会报错) - Alex G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接