以下是定义为的两个类:
Class1{
public method1
{
class2.getInstance().method2();
}
}
Class2{
public static getInstance() { .... }
public method2() { .... }
public Class3 obj = new Class3();
}
我需要为class1的method1编写junit测试。 但我需要知道如何模拟class2的getInstance()和method2()。
另外,请告诉我如何模拟Class3的对象。
答案 0 :(得分:1)
如果您发现很难为您的课程编写一个好的测试,您应该重新设计您的课程以获得更好的可测试性,这也是TDD被称为测试驱动设计的原因。为简单的类编写测试应该永远不难。
然而,
答案 1 :(得分:0)
对于此任务(例如模拟new
),您需要另一个框架。例如PowerMock。
答案 2 :(得分:0)
那么男人,那些已经回答你的人是对的。
如果您发现很难为您的课程编写一个好的测试,您应该重新设计您的课程以获得更好的可测试性,这就是TDD也被称为测试驱动设计的原因。为简单的类编写测试应该不难。
然而,
如何模拟静态方法这里描述PowerMockito模拟单个静态方法和返回对象(感谢Jorge) 这里已经描述了如何部分模拟一个类:如何从Junit模拟内部方法的调用
我可以添加以下内容:
如果你有充分的理由去做你想做的事情,我会给你进一步的建议:
您可以使用powermock库的Whitebox.setInternalState()方法来模拟Class3的对象。
Whitebox.setInternalState(class2, "obj", class3Mock);