2016-03-24 16 views
-1

最近、ユニットテストにもっと注意を払い、良いテストを行う方法がわからない状況に陥りました。オブジェクトが正しく作成されたかどうかのテスト

私はクラスXのオブジェクトを作成して返す関数を持っています。このXクラスはフレームワークの一部ですので、実装にはあまり慣れていませんし、私の場合のように自由がありません"定期的な共同教室"(私が書いたもの)。また、いくつかの引数を渡すと、オブジェクトXが正しいパラメータに設定されているかどうかをチェックすることができず、場合によってはモックを渡すことができません。

私の質問は - このオブジェクトが適切に作成されたかどうかを確認する方法、つまり、どのパラメータがコンストラクタに渡されたかを確認する方法です。どのように私はモックを渡すときにコンストラクタが例外をスローするときに問題を避けるために?これはInputSplitを作成し、だから、

public class InputSplitCreator { 

Table table; 
Scan scan; 
RegionLocator regionLocator; 


public InputSplitCreator(Table table, Scan scan, RegionLocator regionLocator) { 

    this.table = table; 
    this.scan = scan; 
    this.regionLocator = regionLocator; 
} 

public InputSplit getInputSplit(String scanStart, String scanStop, Pair<byte[][], byte[][]> startEndKeys, int i) { 

    String start = Bytes.toString(startEndKeys.getFirst()[i]); 
    String end = Bytes.toString(startEndKeys.getSecond()[i]); 

    String startSalt; 

    if (start.length() == 0) 
     startSalt = "0"; 
    else 
     startSalt = start.substring(0, 1); 

    byte[] startRowKey = Bytes.toBytes(startSalt + "-" + scanStart); 
    byte[] endRowKey = Bytes.toBytes(startSalt + "-" + scanStop); 

    TableSplit tableSplit; 

    try { 

     HRegionLocation regionLocation = regionLocator.getRegionLocation(startEndKeys.getFirst()[i]); 
     String hostnamePort = regionLocation.getHostnamePort(); 

     tableSplit = new TableSplit(table.getName(), scan, startRowKey, endRowKey, hostnamePort); 
    } catch (IOException ex) { 
     throw new HBaseRetrievalException("Problem while trying to find region location for region " + i, ex); 
    } 

    return tableSplit; 
} 

}

たぶん私はここに、十分に明確ではないですが、スニペットです。この分割が正しいパラメータで作成されているかどうかを知りたい。どうやってするか?

+0

それは本当にはっきりしていないので、あなたはおそらく、あなたが使用しているフレームワークとテストしたいと述べたフレームワークのクラスとあなたの答えを更新してください詳細については

あなたは –

答えて

0

これは、直接テストしないでください。このオブジェクトは、おそらく何かのために使用されています、はい?それが正しく作成されていない場合、コードの一部が壊れますか?

アプリケーションによっては、作成されたオブジェクトが特定の方法で動作するかどうかによって異なります。そのため、アプリケーションは依存するこれらのプロシージャが正しく動作していることをテストすることによって暗黙的にテストできます。

これにより、より抽象的なユースケースを、内部動作とフレームワークのタイプとの結合から救うことができます。

+0

あなたは再考してくださいすることができ、私たちのコードを表示することができます私の質問、私は例を追加しましたか? – Marko

1

クラスがフレームワークの一部である場合、フレームワークがそれをテストしたので、直接テストしないでください。 まだこのオブジェクトの動作をテストしたい場合は、このオブジェクトが引き起こす原因 - 反応を見てください。より具体的には、オブジェクトを模擬して、それを実行させ、影響を受けるオブジェクト(制御できる)が予想される動作を実行するか、正しい状態にあるかどうかをチェックします。

+0

たぶん私はあなたを誤解しているかもしれませんが、「テストしない」とか「模擬して模擬テストする」と言っているように聞こえるでしょうか? – kai

+0

ここにキーワードがありません: "まだ*テストしたいのであれば..." –

+0

私の質問を再考できますか?例を追加しましたか? – Marko

関連する問題