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

方法Mockito。when()。然后返回()和Mockito。doreturn()。when()不返回指定的模拟值

杨无尘
2023-03-14
    @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("shreya.mahajan@nitorinfotech.com");
        user.setRole("admin");
        user.setPassword("shreya123");

        return user;

    }

这是我的实际服务方法。在测试时,它给我的变量为空。用户和响应

@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()和保存(),但同时嘲笑我没有收到用户对象在返回中提到的thenback()和doback()。

有人能帮忙吗。

共有1个答案

宗政松
2023-03-14

这里有一些你可以尝试的东西:

请删除mockUserRepository=Mockito。mock(UserRepository.class) 作为其冗余。

而不是

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

做这个

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

 类似资料:
  • 我有一个测试类包含测试方法和两个服务类和。我正在为类中的方法编写JUnit测试,该类包括对类方法的调用。在我写的测试方法中 因此,当调用时,它应该返回大小为1,但不返回此列表,返回的是一个大小为0的列表。

  • 我目前正在使用Mockito在一个spring MVC应用程序中模拟我的服务层对象,我想在其中测试我的控制器方法。但是,由于我一直在阅读Mockito的细节,我发现方法等同于。所以,我的问题是,有两个方法做同样的事情有什么意义,或者和之间有什么微妙的区别? 如有任何帮助,我们将不胜感激。

  • 问题内容: 我目前正在使用在应用程序中模拟我的服务层对象的过程中,我想在其中测试我的方法。但是,当我阅读Mockito的细节时,我发现这些方法等效于。所以,我的问题是什么是有两个方法,做同样的事情或之间有什么细微的区别点和? 任何帮助,将不胜感激。 问题答案: 存根的两种语法大致相同。但是,你始终可以将其用于存根。但是在某些情况下你不能使用。废除无效方法就是这样的一种。其他方法包括与间谍一起使用,

  • 我目前正在学习Spring boot,我一直在测试一个项目——非常感谢任何帮助,因为我是这里的初学者。 我有一个rest控制器测试,使用Mockito,当使用Mockito.when()调用方法时,该测试似乎忽略了Then返回。 这是整个班级: 名为“testCreateUser”的测试没有问题地通过了。给我一个问题的是名为“testFindUserById”的测试。 以下是我尝试测试的控制器方法

  • 看起来HttpClient及其子类有问题。

  • 我在用Mock编写单元测试时遇到了一个问题。有一个对象,我需要模拟有很多getter,我在代码中调用它们。但是,这些不是我的单元测试的目的。所以,有没有一种方法我可以模拟所有的方法,而不是一个一个地模拟它们。 下面是代码示例: 那么,有没有一种方法可以避免为无用的“field1”到“field20”写所有的“when”