1

単体テスト、メソッド、またはシナリオで何をテストしますか?

各メソッドをテストする場合は、最小限のテスト ケースのセットアップが必要です。

他のメソッドを呼び出すメソッドをテストする場合、テスト ケースに必要なセットアップは膨大です。個々のメソッドの単体テストが既に存在する場合、それらを使用しているこのメソッドを記述する理由は何ですか?

ただし、テストする必要がある機能も少しあります。また、コード カバレッジ ツールは、カバレッジ パーセンテージについて不平を言います。

実践的な情報を提供してください。

4

3 に答える 3

3

他のメソッドを呼び出すメソッドをテストする場合、テスト ケースに必要なセットアップは膨大です。個々のメソッドの単体テストが既に存在する場合、それらを使用しているこのメソッドを記述する理由は何ですか?

そのメソッドは、間違ったパラメーターまたは間違った順序で基になるメソッドを呼び出したり、戻り値で間違ったことをしたりする可能性があるためです。

私の経験では、自己完結型メソッドでエラーが発生する可能性は、それらとそのような「グルー コード」との間の相互作用と比較して、通常はかなり小さいものです。

各クラスの動作を分離して完全にテストする「従来の」単体テストは優れた概念ですが、実際には、このシナリオはそれほど一般的でも有用でもありません。それは、モジュール性と (それに含まれる) テスト容易性のためにコードを設計するためにどれだけ注意が払われたかに依存しますが、すべてを達成することは決して不可能です。

于 2009-04-20T10:05:54.707 に答える
2

可能な実行パスごとに 1 つのテスト ケースを使用して、メソッドを単体テストします。

単体テストの典型的な構造は、Arrange-Act-assert (トリプル A) です。

  • 手配 - テストするケースの環境を作成します (これは、スイートのセットアップまたはテストケース、あるいはその両方で行うことができます)
  • Act - テスト ケースがテスト対象のメソッドを呼び出す
  • アサート - テスト中のメソッドが本来の動作を行ったことを確認する

過剰なセットアップは、設計を検討する必要があることを示しているはずです。たとえば、クラスが大きすぎるか、やることが多すぎる可能性があります。過剰な設定はアンチパターンです。

モック オブジェクトを使用して、テストしているクラスを分離できます。

于 2009-04-20T11:23:30.510 に答える
2

単体テストの一番のルールは次のとおりです。

一度に 1 つのことだけをテストしてください。

つまり、メソッドをテストするのではなく、単一の条件下でメソッドの単一の側面をテストします。したがって、同じメソッドに対していくつかのテストを考え出します。

分離は、優れた単体テストの鍵です。依存関係をモックする必要があります (例: RhinoMocks を使用)。最初はより複雑に見えますが、長い目で見れば、管理と保守がはるかに簡単になります。テストでは少量のコードのみをテストし、テストを可能な限り単純にして、保守可能なテストを作成します。

于 2009-04-21T06:58:30.607 に答える