简体   繁体   English

如何使用 Mockito.verify 忽略一个字段?

[英]How to use Mockito.verify with ignore one field?

I have a module:我有一个模块:

class User {
   String id;
   double text;

   constructor (String id){
       this.id = id;
       this.text = Math.random();
   }
}

And a method:还有一个方法:

class UserService{
    void saveUser(String id){
        User user = new User(id);
        userRepository.save(user);
    }
}

And for this code I want to make a Unit test:对于这段代码,我想做一个单元测试:

@Test
void saveUserTest(){
    //Given
    User userTest = new User("123");

    //When
    UserService.saveUser("123");

    //Then
    Mockito.verify(userRepository).save(userTest);
}

and here I got a difference because User text was randomly generated.在这里我有所不同,因为用户文本是随机生成的。

So, how can I ignore the field text?那么,我怎样才能忽略字段文本呢?

You can either ignore it using Mockito.any(User.class)您可以使用Mockito.any(User.class)忽略它

Mockito.verify(userRepo).save(Mockito.any(User.class));

or make use of Argument Captor to capture what was passed in and further assert that value if you want.或使用 Argument Captor 来捕获传入的内容,并根据需要进一步断言该值。

Something like so:像这样:

  @Captor
  private ArgumentCaptor<User> userArgumentCaptor;

  @Test
  void saveUserTest(){
    //Given
    User userTest = new User("123");

    //When
    userService.saveUser("123");

    //Then
    Mockito.verify(userRepo).save(userArgumentCaptor.capture());
    assert(userArgumentCaptor.getValue().getId()).equals("123");
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM