【发布时间】:2014-12-05 15:15:43
【问题描述】:
我正在尝试使用 JMockit 模拟私有方法,并且正在苦苦挣扎。我一直在学习教程,并且可以模拟返回值的私有方法。此特定方法与数据库交互并且不返回任何内容。为了这个测试的目的,我想做的就是有效地屏蔽这个方法。我使用的测试格式如下图,注意通常在方法解封装被调用后会直接得到结果。
@Test
public void testRetrieveAndSaveReport() {
//Make class with private class final, to be used in the Exceptionsinners class
final ESReportOutputLogic eSReportOutputLogic = new ESReportOutputLogic();
// Define Expectations
// pass eSReportOutputLogic as argument to make it a Mocked type in the Exceptions Class
new Expectations(eSReportOutputLogic){
ESReportOutputLogic eSReportOutputLogic;
{
Deepcapsulation.invoke(eSReportOutputLogic);
}
};
ESReportOutputLogic rol = new ESReportOutputLogic();
rol.retrieveAndSaveReport("","",1);
// asserts.....
}
【问题讨论】:
-
既然是私有方法,你能不能只改变方法的签名来返回一些值。在这种情况下,如果数据库操作成功,则返回 0,否则返回 1。很难想象任何私有方法不会将其活动的结果传递给调用方法。可以是返回值,也可以是抛出异常。
标签: java unit-testing private jmockit