如何在 void 函数中模拟 void 函数?
How to mock a void function inside a void function?
我有三个 类 A、B 和 BTest。从 B.printThor() 调用时如何验证 A.printHulk()?
public class A
{
public void printHulk()
{
System.out.println("I am Hulk");
}
}
public class B
{
private A a;
@Inject
public B(A a)
{
this.a=a;
}
public void printThor()
{
System.out.println("I am Thor");
a.printHulk();
System.out.println("End");
}
}
public class BTest
{
@Mock
private A a;
private B b;
@BeforeMethod
public void setup()
{
MockitoAnnotations.initMocks(this);
b=new B(a);
}
@Test
public void testPrintThor()
{
b.printThor();
verify(a,times(1)).printHulk();
}
}
验证 a.printHulk() 出错?由于它是一个 void 函数,我不能在它上面使用 when 和 thenreturn。如何验证它被调用?
你可以这样写你的测试:
@RunWith(MockitoJUnitRunner.class)
public class ClassBTest {
@Mock
private A a;
@InjectMocks
private B b;
@Test
public void testPrintThor() {
b.printThor();
Mockito.verify(a).printHulk();
}
}
或者如果要打印 I am Hulk,您的测试将如下所示:
@RunWith(MockitoJUnitRunner.class)
public class ClassBTest {
@Spy
private ClassA a;
@InjectMocks
private ClassB b;
@Test
public void testPrintThor() {
b.printThor();
Mockito.doCallRealMethod().when(a).printHulk();
}
}
我有三个 类 A、B 和 BTest。从 B.printThor() 调用时如何验证 A.printHulk()?
public class A
{
public void printHulk()
{
System.out.println("I am Hulk");
}
}
public class B
{
private A a;
@Inject
public B(A a)
{
this.a=a;
}
public void printThor()
{
System.out.println("I am Thor");
a.printHulk();
System.out.println("End");
}
}
public class BTest
{
@Mock
private A a;
private B b;
@BeforeMethod
public void setup()
{
MockitoAnnotations.initMocks(this);
b=new B(a);
}
@Test
public void testPrintThor()
{
b.printThor();
verify(a,times(1)).printHulk();
}
}
验证 a.printHulk() 出错?由于它是一个 void 函数,我不能在它上面使用 when 和 thenreturn。如何验证它被调用?
你可以这样写你的测试:
@RunWith(MockitoJUnitRunner.class)
public class ClassBTest {
@Mock
private A a;
@InjectMocks
private B b;
@Test
public void testPrintThor() {
b.printThor();
Mockito.verify(a).printHulk();
}
}
或者如果要打印 I am Hulk,您的测试将如下所示:
@RunWith(MockitoJUnitRunner.class)
public class ClassBTest {
@Spy
private ClassA a;
@InjectMocks
private ClassB b;
@Test
public void testPrintThor() {
b.printThor();
Mockito.doCallRealMethod().when(a).printHulk();
}
}