Spr*_*ing 1 java junit unit-testing mocking
我开始在我的项目中使用JUnit和Mockito,我很快注意到的是我最终将我的私有方法转换为public以便从测试类中加入,这是一个糟糕的解决方案.
有时只测试公共方法就足够了,但有时我也想测试一些内部方法.这有解决方法吗?例如,一个特殊的注释,允许JUnit将私有方法模拟为公共或类似的东西?
您的公共方法必须调用您的私有方法.因此,您可以通过创建公共方法的测试函数来测试您的私有方法.
如果您仍想通过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你在函数中按顺序传递的类型.
直接测试私有方法的需要是一种设计气味.在设计良好的类中,所有功能都是可访问的,合理的,因此可通过其公共接口进行测试.
缺乏这通常意味着你的课程太大而复杂,试图同时处理多个职责.对此的最佳解决方案是重构:将一些功能提取到一个单独的类中,在那里它可以公开获得,因此可以直接进行单元测试.
| 归档时间: |
|
| 查看次数: |
945 次 |
| 最近记录: |