簡體   English   中英

在Java中測試私有方法

[英]Testing a private method in 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();
    }
}

關於我在哪里犯錯的任何建議?

您的方法正在調用:

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

然后將paramString定義為:

 Class[] paramString = new Class[1]; 

這意味着它將尋找使用一個參數的方法簽名 getNewString但是沒有任何參數。

刪除paramString應該可以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM