1. ホーム
  2. unit-testing

他のメソッドを呼び出すメソッドのユニットテスト

2023-11-14 17:39:20

質問

例えば、複数のメソッドを呼び出すメソッドをユニットテストするための最良の方法は何でしょうか。

modify(string value)
{
    if(value.Length > 5)  replaceit(value);

    else changeit(value);
}

この疑似コードは、(現在のところ)どちらかを呼び出すモディファイメソッドを持っています。 replaceit() または changeit() . に対するテストは既に書きました。 replaceitchangeit というように、modifyのために新しいテストを書くことは、99%同じコードのセットになります。 将来的に変更される可能性があるので、考えてテストする必要があります。

では、既存のテストコードをコピーペーストすればいいのでしょうか? テスト コードを共通の関数に移動しますか。 他のアイデアはありますか? 私はここでのベストプラクティスがわかりません。

どのように解決するのですか?

これは、古典的な状態ベースのテストと行動ベースのテストのシナリオです。

このばかばかしいほど単純な例では、出力をテストすることは問題ありません。しかし、ある時点で、実行後に状態を検査するのが複雑なテストに遭遇することになります。 その代わりに、振る舞いをチェックしたいと思うでしょう(例えば、changeitが特定の値で呼び出されたことを確認する)。

その時点で、おそらくRhino.Mocks(.Net)またはMockito(Java)のようなモックオブジェクトフレームワークを調べ、よりインターフェースベースのコードを書き始める必要があります。