應該是一個社群持續爭論中的問題~
相關的說法有部份可以參考看看 [1],這裡先跳過這個問題不管。
假設目標是要測試 private method,實務上可以利用 Reflection API 來達成 [2-3]。
具體來說,就是像以前我 PO 過的動態載入類別的文章 [3] 那樣
透過動態載入的方式取得 method 的實體,並且額外呼叫 setAccessible() 來忽略檢查
就可以達到在 JUnit Test 裡呼叫 private method 的目的了。
假設有一個 Target 類別,包含一個名稱為 privateMethod() 的 static 方法 privateMethod() 的參數是 String 和 long,回傳值是 boolean,則範例如下:
Method method = Target.class.getDeclaredMethod("privateMethod", String.class, long.class); method.setAccessible(true); boolean result = (boolean) method.invoke(Target.class, "", 1); // Test the result. Assert.assertTrue(result);
參考資料:
沒有留言:
張貼留言