在Java中测试私有方法

时间:2014-10-13 18:13:21

标签: java

我是Java编程的初学者。我在测试针对单元测试工具的私有方法时遇到了问题。编译时没有错误,当我在字段中输入值时,我得到了预期的结果。

这是我写的代码的一部分:

public class Title {
     private String getNewString() {
        if (newName == null || "".equals(newName)) {
            return newName;
        } else {
            return (newName.substring(0,1).toUpperCase() + newName.substring(1).toLowerCase());
        }
    }
}

以下是给我错误的测试工具:  <method>不存在,或拼写错误

@Test
public void TestGetNewString() {

    //String parameter
    Class[] paramString = new Class[1]; 
    paramString[0] = String.class;

    try {
        //load the Title at runtime
        Class cls = Class.forName("Title");
        Object obj = cls.newInstance();

        //call the printItString method, pass a String param 
        Method method = cls.getDeclaredMethod("getNewString", paramString);
        method.setAccessible(true);
        String returnVal1 = (String) method.invoke(obj, new String("Peter"));
        String returnVal2 = (String) method.invoke(obj, new String("PETER"));
        String returnVal3 = (String) method.invoke(obj, new String("PeTEr"));
        int modifiers = method.getModifiers();

        assertEquals("getNewString does not format the name correctly. \n", "Peter", returnVal1);
        assertEquals("getNewString does not format the name correctly.  \n", "Peter", returnVal2);
        assertEquals("getNewString does not format the name correctly.  \n", "Peter", returnVal3);
        assertEquals("Method \"getNewString()\" is not marked private.  \n", true, Modifier.isPrivate(modifiers));
    } catch (NoSuchMethodException e) { // Field does not exist
        throw new AssertionError("Method \"getNewString()\" does not exist, or is spelled wrong.  \n");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

有关我在哪里犯错的任何建议吗?

1 个答案:

答案 0 :(得分:1)

你的方法是:

 Method method = cls.getDeclaredMethod("getNewString", paramString);

并将paramString定义为:

 Class[] paramString = new Class[1]; 

这意味着它会查找使用一个参数的方法 signature getNewString但是没有任何参数。

删除paramString应该可以解决问题。