JUnit:如何将我的所有方法公开以便进行测试

Spr*_*ing 1 java junit unit-testing mocking

我开始在我的项目中使用JUnit和Mockito,我很快注意到的是我最终将我的私有方法转换为public以便从测试类中加入,这是一个糟糕的解决方案.

有时只测试公共方法就足够了,但有时我也想测试一些内部方法.这有解决方法吗?例如,一个特殊的注释,允许JUnit将私有方法模拟为公共或类似的东西?

vik*_*iii 5

您的公共方法必须调用您的私有方法.因此,您可以通过创建公共方法的测试函数来测试您的私有方法.

如果您仍想通过Junits测试私有功能,可以使用 reflection.

您必须设置方法的属性 setAccessible==true.

例:

 public void testisvalid() throws Exception 
    {
        MyHandler handler = new MyHandler();
        Method privateStringMethod = MyHandler.class.getDeclaredMethod("isvalid", Long.class);
        privateStringMethod.setAccessible(true);
        String =  (String) privateStringMethod.invoke(handler, 852l );
        assertNotNull(s);
    }
Run Code Online (Sandbox Code Playgroud)

getDeclaredMethod你必须给出private方法的名称,以及arguments你在函数中按顺序传递的类型.


Pét*_*rök 5

直接测试私有方法的需要是一种设计气味.在设计良好的类中,所有功能都是可访问的,合理的,因此可通过其公共接口进行测试.

缺乏这通常意味着你的课程太大而复杂,试图同时处理多个职责.对此的最佳解决方案是重构:将一些功能提取到一个单独的类中,在那里它可以公开获得,因此可以直接进行单元测试.