Java Spring:在Junit中加载的类中自动连接不同的类
我在春天有以下场景:Java Spring:在Junit中加载的类中自动连接不同的类,java,spring,junit,autowired,Java,Spring,Junit,Autowired,我在春天有以下场景: public class ClassA{ @Autowired private ClassB classB; } 我在我的测试课上使用了(更准确地说是自动连线)ClassA。但是我想做的是修改ClassB只是为了我的Junit,这样,当ClassA在我的测试类中自动连接时,它会加载修改后的ClassB(而不是原来的) 有没有办法做到这一点?如果没有Bean配置,我想不出另一种方法来做到这一点。 您可以通过两种方式进行配置: 第一: @Configuration publ
public class ClassA{
@Autowired
private ClassB classB;
}
我在我的测试课上使用了(更准确地说是自动连线)ClassA
。但是我想做的是修改ClassB
只是为了我的Junit,这样,当ClassA
在我的测试类中自动连接时,它会加载修改后的ClassB
(而不是原来的)
有没有办法做到这一点?如果没有Bean配置,我想不出另一种方法来做到这一点。 您可以通过两种方式进行配置: 第一:
@Configuration
public class AppConfig {
@Bean
public ClassB classB() {
return new ClassB() {
// this is a subclass that inherits everything from ClassB, so override what you want here
}
}
}
秒:(摘自)最后,您可以在主文件夹和测试文件夹中创建一个新接口
ClassB
和ClassBImpl
。您仍然需要使用其中一种配置。我认为您需要两种配置,一种用于正常执行,另一种用于测试用例。因此,基本上,您可以说创建ClassA的副本,并自动连接修改后的classB,然后在我的junit?中使用它?。我以前也这样做过,但这次我想避免这种做法。我在想是否有一种Spring机制可以帮助我做我想做的事情。这就是为什么使用接口和实现类是一个好主意。事实上,最佳实践是使用构造函数注入,这意味着您可以在根本不需要Spring的情况下运行单元测试(只需向构造函数传递一个模拟)。要通过Spring实现这一点,您必须为测试和正常执行创建单独的配置(xml或注释配置)。在测试配置中为ClassA设置ClassB的子类。根本不需要重写ClassA。
@RunWith(SpringRunner.class)
@SpringBootTest
public class SomeTest {
// do this if you only want the modified classB in 1 place
@Configuration
static class TestConfig {
@Bean
public ClassB classB () {
return new ClassB() {
// same as the first
}
}
}
@Test
public void testMethod() {
// test
}
}