当前位置: 首页 > 知识库问答 >
问题:

用于控制器的Spring靴Rest API 单元测试

钱劲
2023-03-14

我有两个控制器,一个用于用户,一个用于角色。我已经为用户控制器编写了测试,但是当我尝试运行测试时,它会给我以下错误:

"由以下原因引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有可用的'uk.co.circuare.cube.service.user.repository.RoleRepository'类型的合格bean:需要至少1个符合自动连接候选条件的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowired(必需=true)}"

我正在使用模拟

public class UserControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private ObjectMapper mapper;

    @MockBean
    private UserRepository repository; [![enter image description here][1]][1]

我在我的用户控制器中使用了两个存储库:

@Autowired私人用户存储库;

@自动连线专用角色存储角色存储;

共有3个答案

袁华清
2023-03-14

对此的解决方案非常简单——您需要为测试类中的应用程序上下文提供控制器类中使用的每个bean。

您提到了一个错误,提示NoSuchBeanDefitionException:没有可用的uk.co.circuare.cube.service.user.repository.RoleRepository类型的合格bean:需要至少1个符合autowire候选条件的bean。这意味着在您的测试应用程序上下文中没有RoleRepository类型的bean。

您正在使用@MockBean批注。它将替换应用程序上下文中任何相同类型的现有 Bean。如果未定义相同类型的 Bean,则将添加一个新 Bean。我建议您检查您在本文中使用的模拟注释的详细信息:Mockito.mock() vs @Mock vs @MockBean

要解决您的问题,您的测试类应该如下所示:

public class UserControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private ObjectMapper mapper;

    @MockBean
    private UserRepository repository;

    @MockBean
    private RoleRepository roleRepository;

    ...
}

须景辉
2023-03-14
@ExtendWith(MockitoExtension.class)
public class UserControllerTest {

    @InjectMocks
    private UserController userController;

    @Mock
    private ObjectMapper mapper;

    @Mock
    private UserRepository repository;

    @Mock
    private RoleRepository roleRepository;

    ...
}
宇文和同
2023-03-14

您还必须在测试类中模拟角色存储

 类似资料:
  • 我有一个应用程序,使用经典的Spring配置与xml,它可以使用Spring启动仅用于单元测试? 像这样:

  • 本文向大家介绍AngularJS 单元测试控制器,包括了AngularJS 单元测试控制器的使用技巧和注意事项,需要的朋友参考一下 示例 控制器代码: 考试: 跑!

  • 我有以下结构的控制器: 当我模拟抛出异常UserNotFoundException时,我只得到NestedServletException。即使我尝试添加expected=NestedServletException.class。corbetura报告指出测试中没有覆盖代码块。您有什么建议来帮助测试catch块内的代码吗。 请求的测试代码: 和堆栈跟踪 Java.lang.exception:意外

  • 在发送请求之前(当单元测试时),我是否可以得到csrf令牌?

  • 本文向大家介绍Spring Boot Rest控制器单元测试过程解析,包括了Spring Boot Rest控制器单元测试过程解析的使用技巧和注意事项,需要的朋友参考一下 Spring Boot提供了一种为Rest Controller文件编写单元测试的简便方法。在SpringJUnit4ClassRunner和MockMvc的帮助下,可以创建一个Web应用程序上下文来为Rest Controll

  • 我不完全确定这是否是适合这种问题的地方,但我会试着至少花几分钟来摆脱他们称之为Spring靴测试的地狱。 我正在寻找任何关于测试的最新信息资源(书籍/网站等)。 我是java/kotlin开发人员,现在已经进入第四个年头了,我觉得自己对java/kotlin和Spring Boot软件的理解还不错。但有一个类别让我感到震惊。测试、单元和Rest。 无论出于什么原因,每次我尝试进行新的测试或更新旧的