Java Spring启动测试无法解析存储库依赖关系
我有一个UserRepository,它是CRUD存储库,如图所示:Java Spring启动测试无法解析存储库依赖关系,java,spring,spring-boot,spring-test,Java,Spring,Spring Boot,Spring Test,我有一个UserRepository,它是CRUD存储库,如图所示: @Repository public interface UserRepository extends CrudRepository<User, Long> { } 还有一个WebMvcTest类来测试我的UserController: @RunWith(SpringRunner.class) @WebMvcTest(UserController.class) public class UserControll
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
}
还有一个WebMvcTest类来测试我的UserController:
@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class)
public class UserControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void getAllEmployeesAPI() throws Exception
{
mvc.perform( MockMvcRequestBuilders
.get("/api/users")
.accept(MediaType.APPLICATION_JSON))
.andDo(print())
.andExpect(status().isOk());
}
}
运行服务器时,一切正常。但是,当我运行maven测试时,会出现此错误:
java.lang.IllegalStateException:未能加载ApplicationContext
原因:
org.springframework.beans.factory.unsatifiedDependencyException:
创建名为“userController”的bean时出错:未满足依赖关系
通过“存储库”字段表示;嵌套异常是
org.springframework.beans.factory.BeanCreationException:错误
正在创建名为“userRepository”的bean:无法创建内部bean
类型的“(内豆)#7ba1cdbe”
[org.springframework.orm.jpa.SharedEntityManagerCreator]设置时
bean属性“entityManager”;嵌套异常是
org.springframework.beans.factory.BeanCreationException:错误
创建名为“(内部bean)#7ba1cdbe”的bean:无法解析
设置构造函数时对bean“entityManagerFactory”的引用
论点嵌套异常是
org.springframework.beans.factory.noSuchBean定义异常:否
名为“entityManagerFactory”的bean可用,原因是:
org.springframework.beans.factory.BeanCreationException:错误
正在创建名为“userRepository”的bean:无法创建内部bean
类型的“(内豆)#7ba1cdbe”
[org.springframework.orm.jpa.SharedEntityManagerCreator]设置时
bean属性“entityManager”;嵌套异常是
org.springframework.beans.factory.BeanCreationException:错误
创建名为“(内部bean)#7ba1cdbe”的bean:无法解析
设置构造函数时对bean“entityManagerFactory”的引用
论点嵌套异常是
org.springframework.beans.factory.noSuchBean定义异常:否
名为“entityManagerFactory”的bean可用,原因是:
org.springframework.beans.factory.BeanCreationException:错误
创建名为“(内部bean)#7ba1cdbe”的bean:无法解析
设置构造函数时对bean“entityManagerFactory”的引用
论点嵌套异常是
org.springframework.beans.factory.noSuchBean定义异常:否
名为“entityManagerFactory”的bean可用,原因是:
org.springframework.beans.factory.noSuchBean定义异常:否
名为“entityManagerFactory”的bean可用
如果您现在有相同的结构,我建议
@SpringBootTest
@WebMvcTest
不会将数据库相关bean加载到应用程序上下文中。@WebMvcTest
只加载Web层。如果它包含一些依赖项,则还需要加载应用程序上下文。您可以使用@ContextConfiguration(classes={YouTestConfiguration.class})缩小仅在控制器中使用的依赖关系
这次我遇到了这个错误:没有“org.springframework.test.web.servlet.MockMvc”类型的合格bean可用。我通过添加@AutoConfigureMockMvc解决了这个问题。使用@SpringBootTest看起来更简单。为什么我要一个接一个地处理依赖项呢?@ContextConfiguration为您提供了对用于特定测试的依赖项的更细粒度控制。您可以使用它仅加载所需的依赖项。
@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class)
public class UserControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void getAllEmployeesAPI() throws Exception
{
mvc.perform( MockMvcRequestBuilders
.get("/api/users")
.accept(MediaType.APPLICATION_JSON))
.andDo(print())
.andExpect(status().isOk());
}
}