java - 方法 Mockito.when().thenReturn() 和 Mockito.doreturn().when() 不返回指定的模拟值

标签 java spring-boot spring-mongo

    @InjectMocks
    private UserServiceImpl userService;

    @Mock
    private UserRepository  mockUserRepository;



    //private UserServiceImpl userServiceImpl;

    @Before
    public void initMocks() throws Exception {

        MockitoAnnotations.initMocks(this);
        mockUserRepository = Mockito.mock(UserRepository.class);
    }

    @Test
    public void testCreateUser() {

        User user = createUser();
        Mockito.doReturn(user).when(mockUserRepository).findByEmail(user.getEmail());       

        Mockito.when(mockUserRepository.save(user)).thenReturn(user);
        userService.createUser(user);
    }

private User createUser() {

        User user = new User();
        user.setFirstName("Shreya");
        user.setLastName("Mahajan");
        user.setEmail("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d7a4bfa5b2aeb6f9bab6bfb6bdb6b997b9bea3b8a5beb9b1b8a3b2b4bff9b4b8ba" rel="noreferrer noopener nofollow">[email protected]</a>");
        user.setRole("admin");
        user.setPassword("shreya123");

        return user;

    }

这是我实际的服务方式。在测试时,它给了我变量existingUser和response为空

@Override
    public ResponseVO createUser(User user) {
        ResponseVO responseVO = new ResponseVO();
        User existingUser = userRepository.findByEmail(user.getEmail());
        if(user.getEmail() != null){
            if(existingUser != null){
                responseVO.setStatusCode("500");
                responseVO.setMessage("user Already Exists");
            }else{              
                User response = userRepository.save(user);
                if(response == null){
                    responseVO.setStatusCode("400");
                    responseVO.setMessage("Failure");                       
                }else{
                    responseVO.setStatusCode("200");
                    responseVO.setMessage("Success");       
                }
            }           
        }
        return responseVO;
    }

我正在尝试编写一个测试用例和模拟方法 findByEmail() 和 save(),但在模拟时我没有收到 thenreturn() 和 doreturn() 中提到的用户对象作为返回。

任何人都可以帮忙吗?

最佳答案

您可以尝试以下方法:

请删除 mockUserRepository = Mockito.mock(UserRepository.class); 因为它是多余的。

而不是

Mockito.doReturn(user).when(mockUserRepository).findByEmail(user.getEmail()); 

这样做

Mockito.doReturn(user).when(mockUserRepository).findByEmail(Mockito.any()); 

关于java - 方法 Mockito.when().thenReturn() 和 Mockito.doreturn().when() 不返回指定的模拟值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49934329/

相关文章:

java - Rest API 返回 byte[] i 响应

java - 如何动态更改 application.properties 中的参数,以便可以使用新值来触发计划作业

spring mongodb 添加或更新文件列表

spring-boot - 如何使用自定义过滤器在 Spring Data mongodb 中使用分页和排序?

Java使用bigdecimal计算被3整除到百

java - 如何编辑转换为图像的文本?或任何其他实现/编辑文本的方法

java - Could not determine the dependencies of task ':app:lintVitalRelease' 错误在最近的android升级3.6.1

java - 如何在测试之间重新创建 EntityManagerFactory

java - Spring boot 2.0.5.RELEASE 和 mongo 4.0 连接问题

java - 为什么在java中创建连接成本太高