我正在重构spring boot测试,创建具有常见行为的封装类,这些行将在其他测试中注入。此类仅在测试包中具有范围。
Spring忽略不会在测试中使用的切片(这很好,并且通过spring boot test 1.5的设计),但也忽略了src / test / java中的任何@Component。
问题是如何在 test / java 中配置弹簧启动测试以拾取组件?
我有一个不完整的解决方案,适用于一个测试 我目前的解决方案是:
import com.example.testClasses.TestUtil;
@RunWith(SpringRunner.class)
@SpringBootTest
@Import(TestConfiguration.class)
public class ExampleTest {
@SpyBean
private ServiceDependency1 service1;
@Autowired
private TestUtil testUtil;
}
@Configuration
@ComponentScan(basePackages = "com.example.testClasses")
public class TestConfiguration {
}
@Component
public class TestUtil {
public TestUtil(ServiceDependency1 service) {
}
}
上面的解决方案部分工作,当另一个Utils添加了具有不同注入依赖关系的TestUtils2时,这个依赖关系不会被解析。
这是因为TestUtil1的依赖关系仅通过@SpyBean解决,在第二次测试中不是这种情况。
答案 0 :(得分:0)
我将所有 SpyBean 放在 TestConfiguration 上,并为每次测试使用 @AutoWired 。
import com.example.testClasses.TestUtil;
@RunWith(SpringRunner.class)
@SpringBootTest
@Import(TestConfiguration.class)
public class ExampleTest {
@Autowired
private ServiceDependency1 service1;
@Autowired
private TestUtil testUtil;
}
@Configuration
@ComponentScan(basePackages = "com.example.testClasses")
public class TestConfiguration {
@SpyBean
private ServiceDependency1 service1
@SpyBean
private ServiceDependency2 service2
}
@Component
public class TestUtil {
public TestUtil(ServiceDependency1 service) {
}
}