Java JMockit,如何模拟没有返回的私有方法

Java JMockit,如何模拟没有返回的私有方法,java,unit-testing,private,jmockit,Java,Unit Testing,Private,Jmockit,我正在尝试使用JMockit模拟一个私有方法,并且正在努力。我一直在学习教程,可以模拟返回值的私有方法。此特定方法与数据库交互,不返回任何内容。为了这个测试的目的,我想做的就是有效地屏蔽这个方法。我正在使用的测试格式如下所示,请注意,通常在调用方法deencapsulation之后,结果将是直接的 @Test public void testRetrieveAndSaveReport() { //Make class with private class final, to b

我正在尝试使用JMockit模拟一个私有方法,并且正在努力。我一直在学习教程,可以模拟返回值的私有方法。此特定方法与数据库交互,不返回任何内容。为了这个测试的目的,我想做的就是有效地屏蔽这个方法。我正在使用的测试格式如下所示,请注意,通常在调用方法deencapsulation之后,结果将是直接的

    @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。很难想象有任何私有方法不将其活动的结果传递给调用方法。它可以是返回值,也可以是抛出异常。感谢您的输入[rol.retrieveAndSaveReport(“,”,1)与数据库交互]。当我第一次做这件事的时候,我就成功了,现在我回到这件事上来,我可以想出更好的方法来解决我的问题。最简单的方法是使用系统规则api。具有方法ExpectedSystemExit()和expectSystemExitWithStatus(int)的。想要使用它的人唯一需要注意的是,他们需要获得正确的JUnit版本来使用它。