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

使用Junit和Mock put请求进行测试

岳佐
2023-03-14

我正在尝试对put请求进行测试,它给了我空指针错误,只是在这种类型的请求中,我不知道为什么请有人帮我,这是我的控制器:

@PutMapping ("/update/{id}")
    public Entreprise updateEntreprise(@PathVariable Long id,@RequestBody Entreprise entreprise ) {
       Entreprise e=entrepriseService.getEntreprise(id);
       e.setDescription(entreprise.getDescription());
       e.setNom(entreprise.getNom());
       e.setNumberCertificats(entreprise.getNumberCertificats());
       e.setNumberClients(entreprise.getNumberClients());
       e.setNumberYears(entreprise.getNumberYears());
       e.setNumberCollaborators(entreprise.getNumberCollaborators());
       entrepriseService.updateEntreprise(e);
        return e;
    }

对于测试方法:

@RunWith(SpringRunner.class)
@WebMvcTest(value = EntrepriseController.class, secure = false)
public class TestsEntrepriseController {
    @Autowired
    private MockMvc mockMvc;


    @MockBean
    EntrepriseService entrepriseService;
 @Test
    public void givenEntrepriseURIWithPut_whenMockMVC_thenVerifyResponse() throws Exception {
        Entreprise entreprise = new Entreprise();
        entreprise.setId(1);
        entreprise.setNom("oumaima");
        entreprise.setDescription("description");
        entreprise.setNumberCertificats(12);
        entreprise.setNumberClients(15);
        entreprise.setNumberCollaborators(20);
        entreprise.setNumberYears(12);
        Services services = new Services();
        services.setNom("cloud");
        services.setId(1);
        Set<Services> allServices =  new HashSet<>(Arrays. asList(services));
        entreprise.setServices(allServices);
        mockMvc.perform(put("/entreprise/update/1")
                .contentType(IntegrationTestUtil.APPLICATION_JSON_UTF8)
                .content(IntegrationTestUtil.convertObjectToJsonBytes(entreprise))
        )
                .andExpect(status().isBadRequest())
                .andExpect(content().string("{\"fieldErrors\":[{\"path\":\"title\",\"message\":\"The title cannot be empty.\"}]}"));

    }
}

共有2个答案

陶博耘
2023-03-14

我没有看到你嘲笑服务电话。添加-Mockito。when(EnterpriseService.getEnterprise(Mockito.anyLong()))。thenReturn(新企业())

干弘深
2023-03-14

您需要模拟来自entreseService的两个调用

  1. 对于GetEnterprise(id)
  2. 对于UpdateEnterprise(e)

尝试运行以下代码

@RunWith(SpringRunner.class)
@WebMvcTest(value = EntrepriseController.class, secure = false)
public class TestsEntrepriseController {
    @Autowired
    private MockMvc mockMvc;


    @MockBean
    EntrepriseService entrepriseService;
 @Test
    public void givenEntrepriseURIWithPut_whenMockMVC_thenVerifyResponse() throws Exception {
        Entreprise entreprise = new Entreprise();
        entreprise.setId(1);
        entreprise.setNom("oumaima");
        entreprise.setDescription("description");
        entreprise.setNumberCertificats(12);
        entreprise.setNumberClients(15);
        entreprise.setNumberCollaborators(20);
        entreprise.setNumberYears(12);
        Services services = new Services();
        services.setNom("cloud");
        services.setId(1);
        Set<Services> allServices =  new HashSet<>(Arrays. asList(services));
        entreprise.setServices(allServices);

        Mockito.when(entrepriseService.getEntreprise(Mockito.any())).thenReturn(new Entreprise());
        Mockito.when(entrepriseService.updateEntreprise(Mockito.any(Entreprise .class))).thenReturn(entreprise);

        mockMvc.perform(put("/entreprise/update/1")
                .contentType(IntegrationTestUtil.APPLICATION_JSON_UTF8)
                .content(IntegrationTestUtil.convertObjectToJsonBytes(entreprise))
        )
                .andExpect(status().isBadRequest())
                .andExpect(content().string("{\"fieldErrors\":[{\"path\":\"title\",\"message\":\"The title cannot be empty.\"}]}"));

    }
}
 类似资料:
  • ...还有一个很简单的测试... 如果我在IntelliJ中运行这个,测试就会运行并失败。 如果我提交这个项目并将其推送到github,TeamCity会看到变化并开始构建。生成会很快失败,出现以下错误:

  • 我有这个过滤器类,在使用junit进行测试时需要尽可能高的代码覆盖率。 和测试等级: 当我运行时,它在 线 我如何避免这种情况? 我需要调用这个方法并执行里面的任何内容来提供所需的代码覆盖。

  • 我正在使用Jenkins CI构建我的iOS项目。对于这个任务,我使用sh脚本通过运行xcodebuild直接从git repo构建二进制文件,这很好。目前,我使用eclipse中的appium运行JUnit测试来测试我的应用程序,但我也想将它们集成到Jenkins中。我找到了一些使用ant脚本将JUnit测试集成到jenkins中的教程,但我没有使用ant来构建我的项目。没有ant脚本,我如何将

  • 我有DaoImpl类: 我的测试是: 测试是成功的,但是当我运行具有覆盖率的junit测试时,它显示方法没有被覆盖,因此我的整体单元测试行覆盖率低于要求。我们能涵盖那部分吗?如果是,我们怎么做?谢了。

  • 问题内容: 也许我的问题是新手,但是我真的无法理解在什么情况下使用junit? 无论是编写简单的应用程序还是大型应用程序,我都使用语句对其进行测试,这对我来说很容易。 如果仍然需要调用相同的方法,检查它们返回的内容,然后又要为所有内容添加注释,那么为什么要使用JUnit创建测试类,在项目中创建不必要的文件夹呢? 为什么不编写一个类并立即对其进行测试而不创建Test-class? PS。我从未在刚刚

  • 我现在开始使用JUnit5和Spring Boot的测试。我有一个包含控制器、服务和存储库的Rest API,以及一些使用从我的获取属性的utils类。我没有使用Spring中的“profiles”,只是使用默认配置。 我的应用程序主: 我的项目的体系结构是: 我在主测试类中尝试了“@TestPropertySource”和/或“@ActiveProfiles(”Test“)”,但没有成功。还尝试