Spring Test Utils Autowired

时间:2017-10-11 14:55:18

标签: spring spring-boot-test

我正在重构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解决,在第二次测试中不是这种情况。

1 个答案:

答案 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) {
   }
}