首页文章分类 关于 Search private(私有)方法单元测试无法覆盖?那就用反射调用来测试private(私有)方法

来源:互联网 发布:moodle网络课程平台 编辑:程序博客网 时间:2024/06/06 03:59
import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class PrivateMethodTestUtils {      public static Object invoke(Object methodHostInstance, String methodName,            Object arg) {        Class<?>[] parameterTypes = { arg.getClass() };        Object[] args = { arg };        return invoke(methodHostInstance, methodName, parameterTypes, args);    }      public static Object invoke(Object methodHostInstance, String methodName,            Class<?>[] parameterTypes, Object[] args) {        try {            Method method = methodHostInstance.getClass().getDeclaredMethod(                    methodName, parameterTypes);            method.setAccessible(true);            try {                return method.invoke(methodHostInstance, args);            } catch (IllegalArgumentException e) {                e.printStackTrace();            } catch (IllegalAccessException e) {                e.printStackTrace();            } catch (InvocationTargetException e) {                e.printStackTrace();            }            method.setAccessible(false);        } catch (SecurityException e) {            e.printStackTrace();        } catch (NoSuchMethodException e) {            e.printStackTrace();        }        return null;    }}
/**
*测试类
***/
public class UserManager{    public void addUser(User user){        ……        encryptPwd(user.getPwd);        ……    }    private String encryptPwd(String pwd){        String encryptPwd=encrypt(pwd);        return encryptPwd;    }}

public class UserManagerTest{    @SpringBeanByType    private UserManager manager;    @Test    public void test密码加密(){        String pwd="123456";        Object result= PrivateMethodTestUtils.invoke(manager, "encryptPwd", pwd);        assertEquals("werjadf234f314dfdfg", result);    }}

阅读全文
0 0