Mockito.eq(1) 将值 0 发送给函数

问题描述 投票:0回答:1

我正在使用 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);
}

这里参数传递为

businessId=1
,但传入方法参数变量的值为0。

Expected vs Actual Business Object

如何将值 1L 传递给该方法,还请说明为什么即使我将 1L 传递给该方法,它也会更改为 0L。

java spring spring-boot mockito junit5
1个回答
0
投票

如果您逐步进行调试,您可以看到 Mockito.eq(1L) 正在尝试将 Equals 类中所需的对象(可能为 null)与您的 1L 进行比较。返回值为 0(表示 false)。您应该能够将 1L 直接传递到您的函数中。

© www.soinside.com 2019 - 2024. All rights reserved.