跳到主要内容

ranger java 单元测试

ranger中毫无用处的单元测试

刚看了ranger源码中API相关的测试用例, 一个文件洋洋洒洒几千行测试代码, 其实压根一点业务逻辑都没测试到...

输入的关键函数完全使用mockito, 测试也只测试mockito的关键函数, 完全没有经过真实的业务逻辑调用, 可以认为属于毫无用处的测试代码.

看commit记录提到了code coverage, 估计仅仅为了提高ranger的代码测试覆盖率而写的...

RANGER-1170 : Improvement of Unit Test coverage in Ranger

https://github.com/apache/ranger/commit/1c441f798e1c5da54f6bb9faf211eadb5f10b6b5

不过可以学习基础的mockito写法:

  • mock某个类后, 可以用mockito.when.then指定输入输出
  • verify可以判断是否有执行过这段mock代码

package org.apache.ranger.rest;

@RunWith(MockitoJUnitRunner.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestXUserREST {

@Mock XUserMgr xUserMgr;
@Mock VXGroup vxGroup;

@Test
public void test99deleteUsersByUserName() {

HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
String TestforceDeleteStr="true";
boolean forceDelete = false;
Mockito.when(request.getParameter("forceDelete")).thenReturn(TestforceDeleteStr);
VXString testVXString= new VXString();
testVXString.setValue("User1");
VXUser testVXUser= createVXUser();
VXStringList vxStringList=createVXStringList();

Mockito.when(xUserService.getXUserByUserName(testVXString.getValue())).thenReturn(testVXUser);
forceDelete=true;
Mockito.doNothing().when(xUserMgr).deleteXUser(testVXUser.getId(), forceDelete);
xUserRest.deleteUsersByUserName(request,vxStringList);
Mockito.verify(xUserMgr).deleteXUser(testVXUser.getId(),forceDelete);
Mockito.verify(xUserService).getXUserByUserName(testVXString.getValue());
Mockito.verify(request).getParameter("forceDelete");
}


@Test
public void test116updateXGroupPermissionWithPermissionIdIsNull() {

VXGroupPermission testVXGroupPermission = createVXGroupPermission();
Long testVXGroupPermissionId = testVXGroupPermission.getId();
testVXGroupPermission.setId(null);
Mockito.doNothing().when(xUserMgr).checkAdminAccess();
Mockito.when(xUserMgr.updateXGroupPermission(testVXGroupPermission)).thenReturn(testVXGroupPermission);
VXGroupPermission retVXGroupPermission=xUserRest.updateXGroupPermission(testVXGroupPermissionId, testVXGroupPermission);
Mockito.verify(xUserMgr).updateXGroupPermission(testVXGroupPermission);
Mockito.verify(xUserMgr).checkAdminAccess();
assertNotNull(retVXGroupPermission);
assertEquals(retVXGroupPermission.getId(), testVXGroupPermission.getId());
assertEquals(retVXGroupPermission.getClass(), testVXGroupPermission.getClass());

}