Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring启动测试无法解析存储库依赖关系_Java_Spring_Spring Boot_Spring Test - Fatal编程技术网

Java Spring启动测试无法解析存储库依赖关系

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

我有一个UserRepository,它是CRUD存储库,如图所示:

@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());
  }

}