我有一个看起来像这样的方法(简化)
private boolean x = someMethodToSetTheValueOfX();
private void method(args){
if(x){
method1();
}else{
method2();
}
}
我想写一个单元测试来保证当x为真时,调用method1。我知道我可以使用PowerMock的Whitebox来设置x的值并调用方法,但是如何确认是否调用了method1()?请注意,method1()是无效的。
除EasyMock / PowerMock外,我不允许使用其他框架(如Mockito)。
答案 0 :(得分:1)
你错了;这不是你应该如何设计你的测试。
首先:请不要使用任何PowerMock ...框架。他们依赖于字节码操作;而且迟早会要求麻烦。相信我,我花了很多时间寻找真正奇怪的错误,没有充分的理由。
然后:不要这样测试你的代码!
您使用模拟框架来创建/控制您传递给正在测试的"类的对象"。您没有使用该框架来直接测试您正在测试的课程#34;!更具体地说:您不想编写知道私有方法的测试代码 - 这些是实现细节。
你做了什么:
a)如上所述,您可以使用模拟将对象传递到您正在测试的类中。然后你可以控制/验证那些模拟看到你期望你正在测试的课程#34;制作。所以,最坏的情况是,你可以将method1 / 2放在不同的对象上;然后你可以使用mock / verify来检查它们是否按预期调用。
b)你创建了你所测试的"类的对象" ......然后"断言"关于那些对象的属性;或者在方法调用返回的结果上。
答案 1 :(得分:1)
您可以使用:
System.out.println("method one was called");
如果你可以像eclipse一样在IDE中打印,或者使用:
JOptionPane.showMessageDialogue(null, "method one was called");
并将它们放在method1
中