2016-07-25 53 views
2

我有一個將要執行涉及這樣一些計算一些複雜的動作類:是否有可能使一個類包私人用於測試目的

public class ComplexAction { 

    public void someAction(String parameter){ 
     ComplexActionEvaluator evaluator = new ComplexActionEvaluator(); 
     int value = evaluator.eval(parameter); 
     //some other actions 
    } 

    static class ComplexActionEvaluator implements Evaluator{ 
     public int eval(String parameter){ 
      //evaluation 
     } 
    } 
} 

//package-private, uses only for Actions 
interface Evaluator{ 
    int eval(String parameter); 
} 

由於評價者可能包含一些複雜的邏輯,我我想爲它寫測試。但由於ComplexActionEvaluator是特定於ComplexAction我會私下做,而不是封裝私人。但是這會讓它無法進行測試。

我首先想到的是讓它默認訪問。但是默認訪問只是爲了讓測試可用。

我認爲,如果決定使用哪個訪問修飾符會受到測試的偏見,那就不太好了。也許我做錯了什麼或者這是常見做法?

回答

2

也沒有簡單的答案;因爲你是完全正確的:有意義的事情(只允許訪問用於測試目的)在Java中不起作用。我認爲其他更新的語言實際上引入了一些概念,使您可以將方法/類標記爲「僅專用,但可用於測試代碼」;但Java還沒有。

從這個意義上說,你只能通過「約定」來解決這個問題。像:

  1. 將Javadoc(或非javadoc註釋)來標記的東西都是「不私」用於測試目的
  2. 確保您的包內的事情,其他人應該使用始終攜帶團隊

公共換句話說,你只能「問」人們忽略了某些部分,你只需確保「真公開」的事情被標記爲這樣的,始終記錄爲此類;並且團隊中的每個人都明白:其他任何東西都不感興趣;並應被視爲「私人執行」細節。

+0

其實,「如果你不能用Java解決它,用JavaDocs來完成」這種工作,但在我看來就像是一種解決方法。但我認爲這種情況下,將'ComplexActionEvaluator'放入'ComplexAction'中是自我記錄的... – user3663882

+0

實際上,我認爲它是兩方面的:一方面,它是一種解決方法 - 解決某些問題沒有更好的解決方案。另一方面:擁有適當的javadoc本身就是一件好事;從這個意義上說:人們可以使用已經存在的東西。 – GhostCat

相關問題