簡體   English   中英

model 映射器模擬在 Z2A2D595E6ED9A0B24F027F2B63B134D 引導單元中返回 null object

[英]model mapper mock returns null object in spring boot unit test

我正在嘗試使用 MockMvc 和 Z4D13B33CA816B79B3E 在我的應用程序中為 rest controller class 編寫單元測試我的實體 class 有 DTO class,我將其作為 controller 方法的輸入。 controller 方法將此 DTO object 映射到實體 class 並使用我的服務 ZA2F2ED4F8EBC40AB4C21A29 保留它持久化后,通過映射服務類方法返回的 object 創建一個新的 DTO class,並在 ResponseEntity object 中返回此 DTO。 在我的單元測試中,我使用 @MockBean 注釋模擬了服務 class 和 ModelMapper class 。 我還為模擬的 class 的方法設置了預期的返回值。 但是當我運行測試時,我看到響應體是空的,我認為這是因為模擬映射器沒有正確返回 DTO object。 有人可以幫我讓模擬映射器正確返回 object 以便我的測試通過嗎? 謝謝。

這是 controller 代碼:

@RequestMapping(value = "", method=RequestMethod.POST)
    public ResponseEntity<BranchDto> addBranch(@RequestBody BranchDto branchDto) {
        Branch branch = modelMapper.map(branchDto, Branch.class);
        Branch addedBranch = branchService.addBranch(branch);
        return new ResponseEntity<>(modelMapper.map(addedBranch, BranchDto.class), HttpStatus.CREATED);
    }

這是單元測試代碼:

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private BranchService branchService;

    @MockBean
    private ModelMapper mockModelMapper;

    @Test
    public void testAddBranch() throws Exception{
        BranchDto mockBranchDtoToAdd = new BranchDto();
        mockBranchDtoToAdd.setBranchName("TestBranch");
        mockBranchDtoToAdd.setContactNumber("12345");
        mockBranchDtoToAdd.setEmailId("test@abc.com");
        mockBranchDtoToAdd.setCity("TestCity");
        Branch mockBranchToAdd = new Branch();
        mockBranchToAdd.setBranchName("TestBranch");
        mockBranchToAdd.setContactNumber("12345");
        mockBranchToAdd.setEmailId("test@abc.com");
        mockBranchToAdd.setCity("TestCity");

        Branch mockAddedBranch = new Branch();
        mockAddedBranch.setBranchName("TestBranch");
        BranchDto mockAddedBranchDto = new BranchDto();
        mockAddedBranchDto.setBranchName("TestBranch");
        mockAddedBranchDto.setContactNumber("12345");
        mockAddedBranchDto.setEmailId("test@abc.com");
        mockAddedBranchDto.setCity("TestCity");

        Mockito.when(mockModelMapper.map(mockBranchDtoToAdd, Branch.class)).thenReturn(mockBranchToAdd);
        Mockito.when(branchService.addBranch(mockBranchToAdd)).thenReturn(mockAddedBranch);
        Mockito.when(mockModelMapper.map(mockAddedBranch, BranchDto.class)).thenReturn(mockAddedBranchDto);


        ObjectMapper mapper = new ObjectMapper();
        String mockBranchDtoToAddStr = mapper.writeValueAsString(mockBranchDtoToAdd);
        System.out.println(mockBranchDtoToAddStr);
        mockMvc.perform(post("/branches").contentType(MediaType.APPLICATION_JSON).content(mockBranchDtoToAddStr))
        .andExpect(MockMvcResultMatchers.status().isCreated())
        .andExpect(MockMvcResultMatchers.jsonPath("$.branchName").value("TestBranch"));
    }

經過大量挖掘,我發現這條線

Mockito.when(branchService.addBranch(mockBranchToAdd)).thenReturn(mockAddedBranch);

沒有正確設置模擬 object。 我將此行更改為在when()方法中使用any() ,此后它運行良好。 這是更新的代碼:

Mockito.when(branchService.addBranch(org.mockito.ArgumentMatchers.any())).thenReturn(mockAddedBranch);
Mockito.when(mockModelMapper.map(org.mockito.ArgumentMatchers.any(), org.mockito.ArgumentMatchers.any())).thenReturn(mockAddedBranch);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM