我正在尝试使用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.....
}

最佳答案

您正在使用哪种抽象与数据库进行交互?

我建议您对此进行模拟,而不是尝试从测试should not exist的角度模拟某些东西。

模拟私有方法意味着您有效地将应用程序中的代码留给了测试未发现的地方。

07-24 20:55