Junit 和 Mockito,捕获传递参数的方法调用
Junit And Mockito, Capturing method call on passed argument
我对 Java 中的 Mockito 和 Junit 比较陌生。我如何捕获或验证传递给我正在测试的函数的参数的交互。
Ex-- 主要 class
public class A{
public void setValues(Person p){
p.setFirstName('Lucky');
p.setLastName('Singh');
// Some more code
}
}
测试class
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 return 类型测试这个 setValues 方法。 我知道如果 return 类型是 Person 我可以使用 assert .但是我不能改变方法定义。
所以我想验证是否调用了 setFirstName 和 setlastName。
我正在使用坑测试,并且删除了对 setFirstName 和 setlastName 的调用的突变没有被杀死。
我怎样才能做到这一点??
您可以为您的 Person
class 注入间谍,然后验证是否按如下方式调用方法:
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
。它仍将以与普通实例相同的方式运行,唯一的区别是它还将被检测以跟踪与其进行的所有交互,以便您可以实际验证所调用的方法。
我对 Java 中的 Mockito 和 Junit 比较陌生。我如何捕获或验证传递给我正在测试的函数的参数的交互。 Ex-- 主要 class
public class A{
public void setValues(Person p){
p.setFirstName('Lucky');
p.setLastName('Singh');
// Some more code
}
}
测试class
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 return 类型测试这个 setValues 方法。 我知道如果 return 类型是 Person 我可以使用 assert .但是我不能改变方法定义。
所以我想验证是否调用了 setFirstName 和 setlastName。
我正在使用坑测试,并且删除了对 setFirstName 和 setlastName 的调用的突变没有被杀死。
我怎样才能做到这一点??
您可以为您的 Person
class 注入间谍,然后验证是否按如下方式调用方法:
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
。它仍将以与普通实例相同的方式运行,唯一的区别是它还将被检测以跟踪与其进行的所有交互,以便您可以实际验证所调用的方法。