正しい入力で、通常の場合の予想される出力と望ましい出力を定義します。
それでは、クラスを宣言してテストを実装し、それに何か名前を付け(通常はTestAddingModuleのようなもの)、それにtestAddメソッドを追加します(すなわち、以下のように)。
assertEquals(expectedVal,calculatedVal)
を実行します。メソッドを実行してテストします(Eclipseで、右クリックし、「別のユーザーとして実行」→「JUnitテスト」の順に選択します)。
//for normal addition
@Test
public void testAdd1Plus1()
{
int x = 1 ; int y = 1;
assertEquals(2, myClass.add(x,y));
}
必要に応じて他のケースを追加してください。
メソッドがNull入力を適切に処理することをテストします(以下の例)。
//if you are using 0 as default for null, make sure your class works in that case.
@Test
public void testAdd1Plus1()
{
int y = 1;
assertEquals(0, myClass.add(null,y));
}
プロジェクトの単体テストを作成するには、次の手順に従ってください(私はこのテストを書くためにEclipseを使用しています)。
1 - [新規] - > [Javaプロジェクト]をクリックします。
2-プロジェクト名を書き留めて、Finishをクリックします。
3-あなたのプロジェクトを右クリックします。次に、New - > Classをクリックします。
4-クラス名を書き留めて、Finishをクリックしてください。
次に、このようにクラスを完成させます。
public class Math {
int a, b;
Math(int a, int b) {
this.a = a;
this.b = b;
}
public int add() {
return a + b;
}
}
5- [ファイル] - > [新規] - > [JUnitテストケース]をクリックします。
6- setUp()をチェックしてFinishをクリックしてください。 SetUp()はテストを初期化する場所になります。
7 - [OK]をクリックします。
8-ここで、私は単に7と10を加えます。それで、私は答えが17であると思います。このようにあなたのテストクラスを完成させてください:
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class MathTest {
Math math;
@Before
public void setUp() throws Exception {
math = new Math(7, 10);
}
@Test
public void testAdd() {
Assert.assertEquals(17, math.add());
}
}
9 - パッケージエクスプローラーでテストクラスをクリックして実行し、Run - > JUnit Testをクリックします。
10-これはテストの結果です。
助けになれば幸いです。
これは非常に一般的な質問であり、それに答えることができる方法はたくさんあります。
JUnitを使用してテストを作成したい場合は、テストケースクラスを作成してから、テスト中のクラス/モジュールの特定の機能をテストする個々のテストメソッドを作成する必要があります。これらのメソッドの内部ではさまざまな操作を実行し、結果を正しいものと比較します。可能な限り多くのコーナーケースを試してカバーすることが特に重要です。
あなたの具体的な例では、たとえば次のようにテストできます。
結果を検証するために、org.junit.AssertクラスからさまざまなassertXXXメソッドを使用できます(便宜上、 'import static org.junit.Assert。*'を実行できます)。これらのメソッドは特定の条件をテストし、検証できない場合はテストを失敗させます(オプションで特定のメッセージを使用)。
あなたの場合のテストケースクラスの例(メソッドの内容は定義されていません):
import static org.junit.Assert.*;
public class AdditionTests {
@Test
public void testSimpleAddition() { ... }
@Test
public void testPositiveNegativeAddition() { ... }
@Test
public void testNegativePositiveAddition() { ... }
@Test
public void testNegativeAddition() { ... }
@Test
public void testOverflow() { ... }
}
単体テストを書くことに慣れていないが、代わりに「視覚的に」検証するアドホックテストを書くことでコードをテストします(たとえば、キーボードを使用して入力された引数を受け入れて結果を出力する単純なmainメソッドを書きます)。それから値を入力し続け、結果が正しいかどうかを自分で検証します。それから、そのようなテストを上の形式で書いて、手動ではなく正しいassertXXXメソッドで結果を検証することから始めることができます。このようにして、手動テストをしなければならなかった場合よりもずっと簡単にテストを再実行することができます。
@CoolBeansが述べたように、 jUnit を見てください。 jUnit 4.xを使い始めるには、これが短い チュートリアル です。
最後に、テストとテスト駆動開発(TDD)についてもっと詳しく知りたい場合は、Kent Beck著の次の本をご覧になることをお勧めします。 例によるテスト駆動開発 。
他の回答では、JUnitを使用してテストクラスを設定する方法を説明しました。 JUnitが唯一のJavaテストフレームワークではありません。しかし、フレームワークを使用することの技術的な詳細に集中することはあなたの行動を導くべきである最も重要な概念を損なうので、私はそれらについて話すつもりです。
テスト(あらゆる種類のあらゆる種類のもの)は、あるもの(テスト対象のシステム、SUT)の実際の動作をその予想される動作と比較します。
自動試験はコンピュータープログラムを用いて行うことができる。その比較は柔軟性がなくわかりにくいコンピュータプログラムによって行われているので、予想される動作は正確かつ明確に知られていなければなりません。
プログラムまたはプログラムの一部(クラスまたはメソッド)に期待されることは、仕様です。したがって、ソフトウェアをテストするには、SUTの仕様があることが必要です。これは、明示的な説明、または予想されることに関するあなたの頭の中の暗黙の指定かもしれません。
そのため、自動ユニットテストでは、テストするクラスまたはメソッドを正確かつ明確に指定する必要があります。
しかし、そのコードを書き始めるときには、その仕様が必要でした。ですから、実際にテストが行われていることの一部は、SUTを1行も書く前に始まります。テスト駆動開発(TDD)のテスト技術は、その考えを極端に取り入れ、テストするコードを書く前に単体テストコードを作成します。
単体テストフレームワークは、assertionを使用してSUTをテストします。アサーションは論理式(boolean
name__結果タイプを持つ式、述語)で、SUTが正しく動作している場合はtrue
name__でなければなりません。そのため、仕様はアサーションとして表現(または再表現)する必要があります。
仕様をアサーションとして表現するための便利なテクニックは、契約によるプログラミングです。これらの指定は事後条件という意味です。事後条件は、メソッドまたはコンストラクタから戻った後のSUTの公開されている状態についてのアサーションです。いくつかのメソッドは、invariantsという事後条件を持ちます。これは、メソッドの実行前後に当てはまる述語です。 classは、クラスのすべてのコンストラクタとメソッドの事後条件である不変式を持つとも言えます。したがって、alwaysが成り立つはずです。事後条件(および不変式)は、public
name__およびprotected
name__フィールド、public
name__およびprotected
name__メソッドによって返される値(gettersなど)、およびメソッドに(参照によって)渡されたオブジェクトの公開された表示状態という観点からのみ表現されます。 。
多くの初心者がここでいくつかのコードをテストすることができるかどうかを尋ねる質問を投稿して、そのコードを提示するがそのコードの仕様を述べることなしに。この議論が示すように、だれでもがそのような質問に良い答えを出すことは不可能です。なぜなら、せいぜい潜在的な答えは推測でなければならず、間違ってするかもしれないからです。質問の質問者は明らかに仕様の重要性を理解していないので、ここで説明した基本を理解する必要がある初心者です以前書くことを試みるテストコード.