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