2009-09-15 39 views
7

だから私は、次のようなものになりますクラスがあります。今、などオーバーロードされた関数の単体テストを行うにはどうすればよいですか?

は、DBParameterは、サーバー、DBNAME、DBTYPEなどのプロパティが含まれている単純な値のクラスである
public class MyClass 
{ 

    DatabaseDependency _depend; 

    public MyClass(DatabaseDependency depend) 
    { 
     _depend = depend; 
    } 

    public string DoSomething(DBParameter database) 
    { 
     var result = _depend.GetResults(database, ...); 
     string response = String.Empty;   

     // some logic to process the result 

     return response; 
    } 

} 

を、私は追加したいですDoSomethingへのオーバーロードにより、DBParameterパラメータの代わりに接続文字列を受け入れるようにします(DatabaseDependencyにはすでに接続文字列を受け付けるGetResultsオーバーロードがあるとします)。

私の質問:DatabaseDependency.GetResultsの結果を処理するために使用されたさまざまな論理パスを説明するいくつかの単体テストがあります。 DoSomethingに過負荷を追加すると、コードを本質的にリファクタリングして、このロジックが両方のオーバーロードによって再利用されるようになります(つまり、プライベートメソッドに移動する可能性があります)。これについて単体テストを行う正しい方法は何ですか?私が追加している新しい過負荷のためのすべての論理パスを検証するのと同じだけの単体テストをする必要がありますか?

答えて

5

文字列を受け取るオーバーロードされたメソッドが接続オブジェクトに変換してから元にデリゲートすると確信した場合は、もう1つのテストメソッドを追加する必要があります。

ただし、委任が行われないように、基本となるオーバーロードされたメソッドをリファクタリングすると、これは分解されます。このシナリオでは、両方のメソッドのすべてのテストをより確実に複製することができます。

私は最初のルートが最も実用的だと思います。しかし、しばらくの間、コードカバレッジ解析を実行することをお勧めします。これは、より多くのテストが必要になったときに後で表示されます。

1

はい、私は個人的な方法に共通の処理をリファクタリングします。テストの考慮事項に関係なく、これをやっていると思いますが、コードが重複しています。テストについての考え方が正しいことをしてくれるのは興味深いことです。

次に、重複した初期化パスごとに、簡単なテストをいくつか行います。

5

コードが現在のように表示されている場合は、yes:そのテスト方法をユニットテストする必要があります。基本的にテスト作業を複製する必要があります。

ただし、一方のメソッドが単に他方のメソッドを呼び出すように機能を実装することが理にかなっている場合は、他のメソッドを仮想にすることができます。これにより、テスト固有のサブクラスを作成して、仮想メソッドが他のメソッドによって正しい値で呼び出されていることを単純に検証できます。

ことは、1つまたは複数のユニットテストによって確認されると、今、あなたはメソッドが正しく、他のメソッドを呼び出す証明されているので、あなたは、任意のさらにそのメソッドをテストする必要はありません、あなたは、あなたのテストの努力を集中することができますその方法で。

0

ブラックボックスまたはホワイトボックスのテストを行っている場合、およびアプリケーションが両方のバージョンのメソッドを使用している場合にも依存します。

実装をテストしていると仮定している場合は、単に「メイン」バージョンをテストするだけで問題ありません。提示されたAPI(javadocsなど)についてのみ知っているテストライターのラインに沿って考えているのであれば、両方のメソッドを完全にテストすることを意味するAPIのみに基づいてテストする必要があります。

アプリケーションが1つのメソッドしか使用していない場合は、もう一方のメソッドを非推奨にして、廃止予定のメソッドがあらかじめ決められたバージョンに存在する場合に失敗するバージョンの条件付きテストを作成します。 IE:廃止予定のメソッドがある時点で削除されるようにします。

関連する問題