2016-04-05 8 views
1

ファイル読み込みクラスは私のコードがあるために:どのようにユニットテストは、プロパティは、私は、プロパティがここでファイルを読み込み、クラスのJUnitテストケースを記述しようとしています

public class PropertiesRetreiver { 

    private String foo = ""; 
    private String foo1 = ""; 
    private static String PROPERTIES_PATH ="data.properties"; 

    public PropertiesRetreiver() throws IOException { 

     InputStream in = this.getClass().getResourceAsStream(PROPERTIES_PATH); 
     Properties properties = new Properties(); 
     properties.load(in); 

     foo = properties.getProperty("foo"); 
     foo1 = properties.getProperty("foo1"); 
    } 

    public String getfoo() { 
     return foo; 
    } 

    public String getfoo1() { 
     return foo1; 
    } 
} 

誰かが私にテストケースのシナリオについての考えを与えることができます私は嘲笑してテストすることができますか?ご助力ありがとうございます。

+0

まず、ファイルシステムにハードコードされた依存関係があるため、そのコードを適切に単体テストすることは難しいでしょう。ファイル名をコンストラクタのパラメータとして渡すことを検討できますか?そうすれば、単体テストで少なくとも異なるデータセットを試すことができます。何をテストするのか?コードはシンプルで、コンストラクタとゲッターが2つしかないので、テストする必要があります。 –

+0

私のコンストラクタにファイルパスを追加しようとしました。しかし、それはプロパティファイルから何の価値も得られません。 – user6090970

+0

プロパティ環境は依存していますか?つまり、ローカル用に1セット、CI用に1セット、プロダクション用にもう1セットですか?そこに3つのテストケースがあります。同じテクノロジを実行している環境はスタックしていますか?例えば。 Mac OS/Xローカル、CIOS上のCentos7、Red Hat Linuxの生産中? – MikeJRamsey56

答えて

1

クラスは実際には2つのことを行います:プロパティファイルを読み込み、いくつかの特定のプロパティを格納します。

テスト目的のために

、あなたは(?必要があります)のみ、いずれかの異なるクラス(例えばPropertiesLoaderとのPropertyStore)でこれらの2つの役割を分割することにより、一度に一つの側面に集中するか、少なくともあなたのクラスのいくつかの注射のために可能性があります。あなたが適切にあなたのクラスをテストしたい場合は、コンストラクタからに、不要なコードを削除する

は常に良いアイデアです:)

例:あなたができるので

public class PropertiesRetreiver { 

    private String foo = ""; 
    private String foo1 = ""; 
    private static String PROPERTIES_PATH ="data.properties"; 

    public PropertiesRetreiver() { 
    } 

    public void loadProperties() throws IOException { 
     loadProperties(PROPERTIES_PATH); 
    } 
    public void loadProperties(String path) throws IOException { 
     InputStream in = this.getClass().getResourceAsStream(path); 
     Properties properties = new Properties(); 
     properties.load(in); 
     loadProperties(properties); 
    } 
    public void loadProperties(Properties properties) { 
     foo = properties.getProperty("foo"); 
     foo1 = properties.getProperty("foo1"); 
    } 

    public String getfoo() { return foo; }  
    public String getfoo1() { return foo1; } 
} 

このコードは、テストするためにはるかに簡単になりますプロパティの読み込み/取り込みの各側面に焦点を合わせる