我有以下Spring服务:
@Service
public class MyService {
public List<int> getIds(Filter filter){
...
}
}
和配置类:
@Configuration
public static class MyApplicationContext {
@Bean
public Filter filter(ApplicationContext context) {
return new Filter();
}
}
现在,我想创建一个单元测试来检查getIds方法是否返回正确的结果。我创建了一个以下的JUnit测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=MyApplicationContext.class,
loader=AnnotationConfigContextLoader.class)
public class AppTest
{
@Autowired
Filter filter;
@Autowired
MyService service;
}
编译器为Filter类找到正确的bean,但抛出服务变量的“BeanCreationException:Could not autowire field”异常。我尝试将服务类添加到ContextConfiguration.classes,但随后编译器抛出“IllegalStateException:无法加载ApplicationContext”异常。
如何在ContextConfiguration中包含MyService?
答案 0 :(得分:10)
将以下注释添加到MyApplicationContext
以获取要扫描的服务@ComponentScan("myservice.package.name")
答案 1 :(得分:2)
将这两个注释添加到测试类AppTest中,如以下示例所示:
@RunWith(SpringRunner.class )
@SpringBootTest
public class ProtocolTransactionServiceTest {
@Autowired
private ProtocolTransactionService protocolTransactionService;
}
@SpringBootTest
加载整个上下文。