使用 EasyMock/PowerMock 验证在私有方法中调用了 void 方法
Verify a void method was called inside a private method with EasyMock/PowerMock
我有一个看起来像这样的方法(简化)
private boolean x = someMethodToSetTheValueOfX();
private void method(args){
if(x){
method1();
}else{
method2();
}
}
我想写一个单元测试来保证当x为真时,方法1被调用。我知道我可以使用 PowerMock 的 Whitebox 来设置 x 的值并调用方法,但是我如何确认 method1() 被调用了?请注意,method1() 是无效的。
除了EasyMock/PowerMock.
,我不允许使用其他框架(如Mockito)
你理解错了;那不是您设计测试的方式。
首先:小心使用 PowerMock... 框架。他们依赖于字节码操作;这迟早会带来麻烦。对用户 PowerMock(ito) 来说,唯一合理的情况是您必须测试遗留生产代码。在任何其他情况下:更改您的生产代码以便轻松测试它。
那么:不要这样测试你的代码!
您使用模拟框架 create/control 您传递给“class 被测对象”的那些对象。你不使用框架直接测试你的“class被测”!更具体地说:您不想编写了解私有方法的测试代码 - 这些是实现细节。
你做了什么:
a) 如前所述,您可以使用模拟将对象传递到您的 class 被测对象中。然后你可以 control/verify 这些模拟看到你期望你的“class under test”进行的调用。因此,最坏的情况是,您可以将 method1/2 放在不同的对象上;然后您可以使用 mock/verify 检查它们是否按预期被调用。
b) 你创建了你的“class under test”的对象……然后对这些对象的属性进行“断言”;或方法调用 return.
的结果
您可以使用:
System.out.println("method one was called");
如果您可以在像 eclipse 这样的 IDE 中打印到控制台,或者使用:
JOptionPane.showMessageDialogue(null, "method one was called");
并将它们放入方法 1
我有一个看起来像这样的方法(简化)
private boolean x = someMethodToSetTheValueOfX();
private void method(args){
if(x){
method1();
}else{
method2();
}
}
我想写一个单元测试来保证当x为真时,方法1被调用。我知道我可以使用 PowerMock 的 Whitebox 来设置 x 的值并调用方法,但是我如何确认 method1() 被调用了?请注意,method1() 是无效的。
除了EasyMock/PowerMock.
,我不允许使用其他框架(如Mockito)你理解错了;那不是您设计测试的方式。
首先:小心使用 PowerMock... 框架。他们依赖于字节码操作;这迟早会带来麻烦。对用户 PowerMock(ito) 来说,唯一合理的情况是您必须测试遗留生产代码。在任何其他情况下:更改您的生产代码以便轻松测试它。
那么:不要这样测试你的代码!
您使用模拟框架 create/control 您传递给“class 被测对象”的那些对象。你不使用框架直接测试你的“class被测”!更具体地说:您不想编写了解私有方法的测试代码 - 这些是实现细节。
你做了什么:
a) 如前所述,您可以使用模拟将对象传递到您的 class 被测对象中。然后你可以 control/verify 这些模拟看到你期望你的“class under test”进行的调用。因此,最坏的情况是,您可以将 method1/2 放在不同的对象上;然后您可以使用 mock/verify 检查它们是否按预期被调用。
b) 你创建了你的“class under test”的对象……然后对这些对象的属性进行“断言”;或方法调用 return.
的结果您可以使用:
System.out.println("method one was called");
如果您可以在像 eclipse 这样的 IDE 中打印到控制台,或者使用:
JOptionPane.showMessageDialogue(null, "method one was called");
并将它们放入方法 1