1

私たちのサービスクラスの1つに、DAOの結果を返すだけのメソッドがたくさんあります。

public void acceptRequest(User from, User to) {
    rosterDAO.acceptRequest(from, to);
}

このメソッドの単体テストは次のようになります

private final RosterDAO rosterDAO = context.mock(RosterDAO.class);
...
public void testAcceptRequest() {
context.checking(new Expectations() {{
    oneOf (rosterDAO).acceptRequest(from, to);
    will (returnValue(1));
}
});

今、私にはこのテストは完全に無意味に見えます。それが行う唯一のことは、メソッドが別のメソッドを呼び出すことをテストすることです。戻り値はすでにDAOテストで十分にカバーされていますが、これらのテストを維持するための努力を正当化するのに十分なことが行われていないと思うので、これらのテストを削除したいと思います。

したがって、100%のカバレッジを主張するTDDの達人は、次のようになります。

このテストがプロジェクトにどのような価値をもたらすと思いますか?

どうすればもっと上手に書くことができますか?

4

3 に答える 3

3

経験則は、壊れる可能性のあるものすべてをテストすることです。したがって、ワンライナーが実際の状況下で合理的に壊れることはないと確信している場合は、テストしないでおくことができます。ただし、これらのメソッドの一部に対してすでに単体テストを実行している場合、それらを削除する理由はありません。より多くの単体テストを実行しても問題はなく、メンテナンス コストは無視できるはずです。

そのままでは、メソッドは簡単に見えます。ただし、将来の拡張/変更の可能性も考慮してください。予見可能な将来にメソッドが変更される可能性が実際にある場合は、今すぐ単体テストを行う必要があります。

ただし、より大きなシナリオを統合テストでカバーして、システムのさまざまな部分が全体として実際の状況 (に近い) で期待どおりに連携することを確認することをお勧めします。

私見 100% の単体テスト カバレッジは、ほとんどの場合、現実世界のプロジェクトでは非現実的で不要です。通常、かなりの量の例外処理コードがあり、テストが困難些細なことです。したがって、私の経験では、努力するだけの価値はないかもしれません。限られたリソースを最大限に活用して、最も重要な部分に最初に集中します。このようなメソッドがテストされていない最も興味深いコード部分であり、それらをカバーする時間とエネルギーがまだある場合は、テストスイートを完成させることもできます:-) ただし、ほとんどの実際のプロジェクトは残念です.このレベルのジレンマとはかけ離れています :-(

于 2010-09-23T08:28:25.660 に答える
2

これらのテストを興味深いものにするには、どれだけの複雑さが必要になるでしょうか?

ここで、間違っている可能性があることが 3 つあります。他のすべての DAO から rosterDAO を選択することと、渡す 2 つのパラメーター (from と to) です。これらは、たとえば、コンパイル エラーなしで転置できます。たまたま、実行する例外処理がないように思われるので (ちなみにそうですか?)、これはかなり最小限のケースであることに同意します。

ただし、ここに追加のロジックが少しある場合、たとえば、DAO の選択の条件や渡すパラメーターなど、いくつかのテストが必要になることは間違いありません。

あなたのプロジェクトを全体的に見ると、この方法は一般的ですか? 20 個のメソッドがあり、そのうち 19 個に条件があり、テストする価値があるとします。その場合、私は物事をきちんとしたままにして、このメソッドもテストします-それを行うのはほとんど仕事ではありません.

これが支配的なパターンである場合、Peter Torak に同意します。おそらく、努力する価値はありません。しかし、この領域をカバーするために、統合テストにもっと注意を払います。

于 2010-09-23T08:34:50.377 に答える
1

検証やビジネス ロジックがないため、この特定のメソッドの単体テストを作成することはおそらく無意味です (検証はおそらく rosterDAO レベルで行われます)。ただし、モック化されたものではなく、実際の rosterDAO を使用してメソッドの統合テストを作成する必要があります。

于 2010-09-23T08:43:41.350 に答える