5

JUnit はブラックボックス テストですか、それともホワイト ボックス テストですか? ホワイトボックスだと思いますが、よくわかりません。私はそれを探していますが、明確な答えが見つかりません。それについての簡単な議論でさえ役に立ちます。

4

2 に答える 2

6

「JUnit」の名前に「ユニット」という単語が使用されていることは、JUnit が単体テストにのみ適していることを示している可能性があります。単体テストは実質的にホワイトボックス テストと同義であるため、疑いは正しい方向にあります。ただし、物事はもう少し微妙です。

ユニットテストは、本に従って行われる場合、依存関係のないユニットをテストする場合を除いて、すべてのケースで必然的にホワイトボックステストになります。

依存関係のないユニットの場合、ユニット テストと統合テストの間に違いはありません (統合する依存関係はありません)。したがって、ホワイト ボックス テストとブラック ボックス テストの概念は適用できません。

依存関係があるユニットの場合、ユニット テストは必然的にホワイト ボックス テストになります。これは、ユニットをテストするために、そのユニットのみをテストするために、その依存関係と統合してテストすることは許可されていないため、そのすべてを削除する必要があるためです。依存関係を取り除き、それらをモックに置き換えますが、そうすることで、ユニットの依存関係が何であるかだけでなく、より重要なことに、それがそれらとどのように相互作用するかを正確に知っていると主張しています. (どのメソッドを呼び出すか、どのパラメーターを使用するかなど)。

ただし、「ユニット」がその名前の一部であるにもかかわらず、JUnit 自体はユニット テストに限定されないため、ホワイト ボックスまたはブラック ボックスのアプローチを課すことはありません。JUnit を使用して、好きな種類のテストを行うことができます。

JMock や Mockito などのモック フレームワークを追加することで、テストを必然的にホワイト ボックス型にすることができます。

JUnit を使用するときは、私がインクリメンタル統合テストと呼んでいるものだけを実行します。これは、最初に依存関係のないすべてのユニットをテストし、次に依存関係が既にテストされているユニットで統合テストを行い、すべてがテストされるまでということを意味します。場合によっては、依存関係の一部をテスト用の特別な実装 (たとえば、実際のオンディスク RDBMS の代わりに HSQLDB) に置き換えますが、モックを使用することはありません。したがって、依存関係のないユニットの周辺ケースを除いて、単体テストを行うことはありません。既に説明したように、単体テストと統合テストの間に区別はありません。したがって、私はホワイト ボックス テストを行うことはありません。ブラックボックステストを行います。そして、私はそのすべてに JUnit を使用しています。(または、JUnit とほぼ互換性のある私自身のテスト プラットフォーム。)

業界のほとんどは、JUnit を使用して広範な単体テスト (ホワイト ボックス テスト) と統合 (ブラック ボックス) テストを行っているようです。

于 2013-05-12T07:34:40.813 に答える
0

ホワイトボックス テストの定義に基づいて、JUnit はこれらの形式のテストに含まれており、次の手法が含まれています:(たとえば、コードに基づいてテストを作成したり、考えられるすべての経路をテストするために必要なすべての情報を提供したりします。これには、正しい入力だけでなく、間違った入力も含まれます。エラーハンドラーも検証できるようにします。)

于 2012-04-25T14:50:36.650 に答える