我有一个@Service
类,可以注入一些属性。
我想在注射过程正常工作的情况下编写一个junit测试。
如何在不加载完整的应用程序上下文配置的情况下定义JUnit
测试?
@Service
public class MyService {
@Value("${test.property}")
private String value;
public String getValue() { return value; }
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class MyTest {
@Autowired
private MyService service;
@Test
public void test() {
assertNotNull(service.getValue());
}
}
但是当我跑这个时:
java.lang.IllegalStateException: Neither GenericXmlContextLoader nor AnnotationConfigContextLoader was able to detect defaults, and no ApplicationContextInitializers were declared for context configuration
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.processContextConfiguration(AbstractDelegatingSmartContextLoader.java:208)
at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:348)
at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:305)
答案 0 :(得分:1)
您没有指定bean文件从哪里注入您在测试中使用@Autowired注释的字段。你应该有类似的东西:
@ContextConfiguration(locations = {
"classpath:applicationContext.xml",
"classpath:junit-applicationContext.xml"
})
答案 1 :(得分:-2)
查看unitils
它有一个测试弹簧的模块。如果您的服务与数据库交互,它也非常方便。