0

我对 Java 中的 Mockito 和 Junit 比较陌生。如何捕获或验证传递给我正在测试的函数的参数的交互。Ex--主类

public class A{

 public void setValues(Person p){
  p.setFirstName('Lucky');
  p.setLastName('Singh');

// Some more code
 }
}

测试班

class Test {

@InjectMocks
A classUnderTest;

@Test 
public void tests(){
  classUnderTest.setValues(new Person());
// What to do next to verfiy that the setFirstName and setLastName where really called on Person Object as setValues have void return type??
}
}

现在我想用 void 返回类型测试这个 setValues 方法。我知道如果返回类型是我可以使用断言的人。但我无法更改方法定义。所以我想验证是否调用了 setFirstName 和 setlastName。
我正在使用pit-test,并且突变删除了对setFirstName的调用,并且setlastName没有被杀死。
我怎样才能做到这一点?

4

1 回答 1

1

你可以为你的Person类注入一个间谍,然后验证方法是否被调用如下:

class Test {
  @Spy
  Person person = new Person();

  @InjectMocks
  A classUnderTest;

  @Test 
  public void tests(){
    classUnderTest.setValues(person);

    // You can now verify if the methods setFirstName and setLastName where really called on Person
    verify(person, times(1)).setFirstName(isA(String.class));
    verify(person, times(1)).setLastName(isA(String.class));
  }
}

在您的情况下,间谍将包装现有实例Person。它仍然会以与普通实例相同的方式运行,唯一的区别是它还将被检测为跟踪与它的所有交互,以便您可以实际验证调用的方法。

于 2021-11-23T01:06:05.427 回答