Mockito.eq(1) 将值作为 0 发送到函数

Mockito.eq(1) sending value as 0 to the function

提问人:Aniket Mhatre 提问时间:11/12/2023 更新时间:11/12/2023 访问量:39

问:

我正在使用 JUnit 和 Mockito 框架测试以下方法。

public Business updateBusiness(BusinessRequest businessRequest, Long businessId) {
        String fileURL = fileStorageService.uploadFileToStorage(businessRequest.getFile(), businessRequest.getEmail());
        Business business = Business.builder()
                .businessId(businessId)
                .businessName(businessRequest.getBusinessName())
                .email(businessRequest.getEmail())
                .fileURL(fileURL)
                .status(BusinessStatus.PENDING)
                .category(categoryService.getCategoryByID(businessRequest.getCategoryId()))
                .description(businessRequest.getDescription())
                .build();
        businessRepository.save(business);
        return business;
}

测试方法:

@Test
public void testUpdateBusiness() {
        BusinessRequest mockedBusinessRequest = BusinessRequest.builder()
                .email("[email protected]")
                .businessName("TestBusinessName")
                .role(Role.PARTNER)
                .file(new MockMultipartFile("TestName", new byte[]{anyByte()}))
                .description("TestBusinessDescription")
                .categoryId(1L)
                .build();
        Business actualBusiness = businessServiceMock.updateBusiness(mockedBusinessRequest, Mockito.eq(1L));
        Assertions.assertEquals(mockedBusiness, actualBusiness);
}

这里传递的参数是 0,但方法参数变量中的值是 0。businessId=1

预期业务对象与实际业务对象

我怎样才能将值 1L 传递给方法,并请说明为什么即使我将 1L 传递给方法,它也会更改为 0L。

java spring-boot mockito junit5

评论

0赞 Julian 11/12/2023
顾名思义,这是模拟还是您要测试的服务的真实实例?如果是模拟,那么你测试的班级是什么?如果是一个真实的实例,那么你应该模拟 ,并针对与这些模拟的交互设置期望值,并断言结果businessServiceMockfileStorageServicecategoryServicebusinessRepository
0赞 Aniket Mhatre 11/12/2023
@Julian 这是对原始班级的嘲弄。期望也设定了。有一个问题,我用和代替了new MockMultipartFile("TestName", new byte[]{anyByte()})byte[] arr = new byte[2];new MockMultipartFile("TestName", arr)
0赞 Jeff Bowman 11/12/2023
any等方法不能用作返回值。它们仅在您在 Mockito 和调用中使用的方法调用中工作,而不是在您实际调用的 Builder 或构造函数(或其他任何内容)中工作。anyBytewhenverify

答:

0赞 Matthew Sexton 11/12/2023 #1

如果你单步调试,你可以看到 Mockito.eq(1L) 正在尝试将 Equals 类中想要的 Object(可能是 null)与你的 1L 进行比较。如果为 false,则返回值为 0。您应该能够将 1L 直接传递到您的函数中。

评论

0赞 Aniket Mhatre 11/12/2023
谢谢! 工程Business actualBusiness = businessServiceMock.updateBusiness(mockedBusinessRequest, 1L);
0赞 Matthew Sexton 11/12/2023
很高兴我能帮上忙。我强烈建议在 Eclipse 或您喜欢使用的任何 IDE 中进行调试。YouTube 上有一些关于如何使用调试的精彩教程(我推荐 Coding with John)。调试允许您直接进入 Mockito.eq(1L) 以查看它正在执行的操作。祝您编码愉快!