【问题标题】:Spring Boot Test cannot resolve repository dependencySpring Boot Test 无法解析存储库依赖关系
【发布时间】:2019-12-13 03:28:41
【问题描述】:

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

@Repository
public interface UserRepository extends CrudRepository<User, Long> {

}

一个像这样的用户控制器:

@RestController
@RequestMapping("/api")
public class UserController {

    @Autowired
    private UserRepository repository;
    @Autowired
    private UserResourceAssembler assembler;

还有一个 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-test 时出现此错误

java.lang.IllegalStateException: 无法加载 ApplicationContext 造成的: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“userController”的 bean 时出错:不满足的依赖关系 通过字段“存储库”表示;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为“userRepository”的bean:无法创建内部bean '(inner bean)#7ba1cdbe' 类型 [org.springframework.orm.jpa.SharedEntityManagerCreator] 设置时 bean 属性 'entityManager';嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为“(内部 bean)#7ba1cdbe”的 bean:无法解析 在设置构造函数时引用 bean 'entityManagerFactory' 争论;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 可用的名为“entityManagerFactory”的 bean 原因: org.springframework.beans.factory.BeanCreationException:错误 创建名为“userRepository”的bean:无法创建内部bean '(inner bean)#7ba1cdbe' 类型 [org.springframework.orm.jpa.SharedEntityManagerCreator] 设置时 bean 属性 'entityManager';嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为“(内部 bean)#7ba1cdbe”的 bean:无法解析 在设置构造函数时引用 bean 'entityManagerFactory' 争论;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 可用的名为“entityManagerFactory”的 bean 原因: org.springframework.beans.factory.BeanCreationException:错误 创建名为“(内部 bean)#7ba1cdbe”的 bean:无法解析 在设置构造函数时引用 bean 'entityManagerFactory' 争论;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 可用的名为“entityManagerFactory”的 bean 原因: org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 名为“entityManagerFactory”的 bean 可用

【问题讨论】:

    标签: java spring spring-boot spring-test


    【解决方案1】:

    如果你现在有同样的结构,我推荐@SpringBootTest

    @WebMvcTest 不会将与数据库相关的 bean 加载到应用程序上下文中。

    【讨论】:

    • 这次我遇到了这个错误:没有 'org.springframework.test.web.servlet.MockMvc' 类型的合格 bean 可用
    • 我已经通过添加@AutoConfigureMockMvc 解决了这个问题。
    【解决方案2】:

    @WebMvcTest 仅加载 Web 层。如果它包含一些依赖项,您还需要加载您的应用程序上下文。您可以使用 @ContextConfiguration(classes = {YouTestConfiguration.class}) 缩小仅在控制器中使用的依赖项

    【讨论】:

    • 使用@SpringBootTest 看起来更容易。为什么要一一解决依赖关系?
    • @ContextConfiguration 让您可以更细致地控制用于特定测试的依赖项。您可以使用它来仅加载所需的依赖项。
    猜你喜欢
    • 2020-06-04
    • 2020-07-20
    • 2019-01-27
    • 2015-04-09
    • 2019-12-24
    • 1970-01-01
    • 2014-05-06
    • 2017-04-10
    • 2019-08-14
    相关资源
    最近更新 更多