将 Spring 服务自动装配到 JUnit 测试中
Autowiring Spring services into JUnit tests
服务如下
@Service
public class MyService {
public List<Integer> getIds(Filter filter){
// Method body
}
}
还有一个配置class。
@Configuration
public static class MyApplicationContext {
@Bean
public Filter filter(ApplicationContext context) {
return new Filter();
}
}
期望的目标是进行单元测试以确认 getIds() returns 正确的结果。
请参阅下面的 JUnit 测试。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=MyApplicationContext.class,
loader=AnnotationConfigContextLoader.class)
public class AppTest
{
@Autowired
Filter filter;
@Autowired
MyService service;
}
编译器为 Filter class 找到了正确的 bean,但为服务变量抛出了 BeanCreationException: Could not autowire field
异常。我已尝试将服务 class 添加到 ContextConfiguration classes 属性,但这会导致 IllegalStateException: Failed to load ApplicationContext
异常。
如何将 MyService 添加到 ContextConfiguration?
为要扫描的服务MyApplicationContext
添加如下注解@ComponentScan("myservice.package.name")
将这两个注释添加到测试 class AppTest 中,如下例所示:
@RunWith(SpringRunner.class )
@SpringBootTest
public class ProtocolTransactionServiceTest {
@Autowired
private ProtocolTransactionService protocolTransactionService;
}
@SpringBootTest
加载整个上下文。
服务如下
@Service
public class MyService {
public List<Integer> getIds(Filter filter){
// Method body
}
}
还有一个配置class。
@Configuration
public static class MyApplicationContext {
@Bean
public Filter filter(ApplicationContext context) {
return new Filter();
}
}
期望的目标是进行单元测试以确认 getIds() returns 正确的结果。 请参阅下面的 JUnit 测试。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=MyApplicationContext.class,
loader=AnnotationConfigContextLoader.class)
public class AppTest
{
@Autowired
Filter filter;
@Autowired
MyService service;
}
编译器为 Filter class 找到了正确的 bean,但为服务变量抛出了 BeanCreationException: Could not autowire field
异常。我已尝试将服务 class 添加到 ContextConfiguration classes 属性,但这会导致 IllegalStateException: Failed to load ApplicationContext
异常。
如何将 MyService 添加到 ContextConfiguration?
为要扫描的服务MyApplicationContext
添加如下注解@ComponentScan("myservice.package.name")
将这两个注释添加到测试 class AppTest 中,如下例所示:
@RunWith(SpringRunner.class )
@SpringBootTest
public class ProtocolTransactionServiceTest {
@Autowired
private ProtocolTransactionService protocolTransactionService;
}
@SpringBootTest
加载整个上下文。