我正在进行下一个测试:
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/META-INF/spring/applicationContext.xml" })
public class FloorServiceTest {
@Autowired
private FloorService floorService;
@Test
public void testFloorService() {
floorService.findById((long)1);
}
}
将文件applicationContext.xml
放在文件夹/APP/src/main/resources/META-INF/spring/
但似乎没有正确地自动装配bean:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.confloorapp.services.FloorServiceTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.confloorapp.services.FloorService com.confloorapp.services.FloorServiceTest.floorService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.confloorapp.services.FloorService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
答案 0 :(得分:11)
尝试
@ContextConfiguration(locations = { "classpath:/META-INF/spring/applicationContext.xml" })
老实说,我会离开xml并走这条路。 改变
@ContextConfiguration(locations = { "/META-INF/spring/applicationContext.xml" })
到
@ContextConfiguration(classes = { FloorServiceTestConfig.class })
创建about class
@Configuration
public class FloorServiceTestConfig
{
@Bean
public FloorService floorService()
{
return new FloorService();
}
}
这种方式当你需要为课堂模拟你的bean时,你没有测试它,如下所示
@Configuration
public class FloorServiceTestConfig
{
@Bean
public FloorService floorService()
{
return Mockito.mock(FloorService.class);
}
}
答案 1 :(得分:1)
上面给出的@Configuration
的想法很有效。但为此,您必须使用@Configuration
注释您的课程。
当离线测试时,即在组织中测试用例未在构建时执行时,这不是一个好主意。
在那种情况下
@ContextConfiguration(locations = { "classpath:/META-INF/spring/applicationContext.xml" })
将是个不错的主意。
要使用此方法,请注意以下事项:
检查项目的.classpath
文件中的类路径。
如果你不能写相对于类路径applicationContext
的路径。
您可以在测试用例文件夹中保留另一个文件applicationContextTest
文件夹,然后可以使用
@ContextConfiguration(locations = { "classpath:applicationContextTest.xml"})
答案 2 :(得分:0)
在您的情况下,您应该使用:
@ContextConfiguration(locations = "file:src/main/resources/META-INF/spring/applicationContext.xml")
另一个提示,我看到你在测试环境中使用了你的作品applicationContext.xml
,恕我直言,这不是一个好习惯,尝试使用特定的一个进行测试,如applicationContext-test.xml
,所以你可以在不损害生产环境的情况下使用您的测试环境。