junit チュートリアル
junitを使い始める
サーチ…
備考
JUnitは、 Javaプログラミング言語の繰り返し可能なテストを書くためのシンプルなフレームワークです 。ユニットテストフレームワーク用のxUnitアーキテクチャのインスタンスです。
主な機能は次のとおりです。
- テストで値をテストする方法をカスタマイズできるアサーション
- クラスでテストを実行する方法を指定できるテストランナー
- クラス内のテストの動作を柔軟に変更できるルール
- スイートでは 、さまざまなクラスのテストスイートを一緒に構築できます
JUnitの便利な拡張機能:
バージョン
バージョン | 発売日 |
---|---|
JUnit 5マイルストーン2 | 2016-07-23 |
JUnit 5マイルストーン1 | 2016-07-07 |
JUnit 4.12 | 2016-04-18 |
JUnit 4.11 | 2012-11-14 |
JUnit 4.10 | 2011-09-28 |
JUnit 4.9 | 2011-08-22 |
JUnit 4.8 | 2009-12-01 |
JUnit 4.7 | 2009年7月28日 |
JUnit 4.6 | 2009-04-14 |
インストールまたはセットアップ
JUnitはJavaライブラリなので、インストールするにはJavaプロジェクトのクラスパスに少数のJARファイルを追加するだけで済みます。
これらの2つのJARファイルを手動でダウンロードできます: junit.jar & hamcrest-core.jar 。
Mavenを使用している場合は、単にpom.xml
依存関係を追加するだけです:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
または、Gradleを使用している場合は、 build.gradle
依存関係を追加します。
apply plugin: 'java'
dependencies {
testCompile 'junit:junit:4.12'
}
その後、最初のテストクラスを作成することができます:
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class MyTest {
@Test
public void onePlusOneShouldBeTwo() {
int sum = 1 + 1;
assertEquals(2, sum);
}
}
コマンドラインから実行します:
- Windows
java -cp .;junit-X.YY.jar;hamcrest-core-XYjar org.junit.runner.JUnitCore MyTest
- LinuxまたはOsX
java -cp .:junit-X.YY.jar:hamcrest-core-XYjar org.junit.runner.JUnitCore MyTest
またはMaven: mvn test
基本単位テストの例
この例は、junitを使用してStringBuilder.toString()をunittestingするための基本的な設定です。
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class StringBuilderTest {
@Test
public void stringBuilderAppendShouldConcatinate() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("String");
stringBuilder.append("Builder");
stringBuilder.append("Test");
assertEquals("StringBuilderTest", stringBuilder.toString());
}
}
@ビフォアーアフター
注釈付きメソッド@Before
のすべての実行前に実行されます@Test
方法。 @After
アノテートされたメソッドは@Test
メソッドのたびに実行されます。これは、テスト設定を繰り返し設定し、すべてのテスト後にクリーンアップするために使用できます。したがって、テストは独立しており、準備コードは@Test
メソッドの中にコピーされません。
例:
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class DemoTest {
private List<Integer> list;
@Before
public void setUp() {
list = new ArrayList<>();
list.add(3);
list.add(1);
list.add(4);
list.add(1);
list.add(5);
list.add(9);
}
@After
public void tearDown() {
list.clear();
}
@Test
public void shouldBeOkToAlterTestData() {
list.remove(0); // Remove first element of list.
assertEquals(5, list.size()); // Size is down to five
}
@Test
public void shouldBeIndependentOfOtherTests() {
assertEquals(6, list.size());
}
}
@Before
または@After
注釈を付けられたメソッドは、 public void
で、引数はゼロでなければなりません。
予想される例外をキャッチする
try catch
ブロックなしで簡単に例外をキャッチすることは可能です。
public class ListTest {
private final List<Object> list = new ArrayList<>();
@Test(expected = IndexOutOfBoundsException.class)
public void testIndexOutOfBoundsException() {
list.get(0);
}
}
上記の例は、スローされた例外によって運ばれるメッセージをチェックする必要がない/必要がない場合に、より単純なケースで十分です。
例外に関する情報を確認する場合は、try / catchブロックを使用します。
@Test
public void testIndexOutOfBoundsException() {
try {
list.get(0);
Assert.fail("Should throw IndexOutOfBoundException");
} catch (IndexOutOfBoundsException ex) {
Assert.assertEquals("Index: 0, Size: 0", ex.getMessage());
}
}
この例では、例外がスローされないときにテストが失敗することを確実にするために、常にAssert.fail()
を追加することに注意する必要があります。
より詳細なケースについては、JUnitにExpectedException
@Rule
があります。これはこの情報もテストでき、次のように使用されます。
public class SimpleExpectedExceptionTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void throwsNothing() {
// no exception expected, none thrown: passes.
}
@Test
public void throwsExceptionWithSpecificType() {
expectedException.expect(NullPointerException.class);
throw new NullPointerException();
}
@Test
public void throwsExceptionWithSpecificTypeAndMessage() {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("Wanted a donut.");
throw new IllegalArgumentException("Wanted a donut.");
}
}
JUnit5で例外をテストする
JUnit 5でこれを実現するには、 まったく新しいメカニズムを使用します。
試験された方法
public class Calculator {
public double divide(double a, double b) {
if (b == 0.0) {
throw new IllegalArgumentException("Divider must not be 0");
}
return a/b;
}
}
試験方法
public class CalculatorTest {
@Test
void triangularMinus5() { // The test method does not have to be public in JUnit5
Calculator calc = new Calculator();
IllegalArgumentException thrown = assertThrows(
IllegalArgumentException.class,
() -> calculator.divide(42.0, 0.0));
// If the exception has not been thrown, the above test has failed.
// And now you may further inspect the returned exception...
// ...e.g. like this:
assertEquals("Divider must not be 0", thrown.getMessage());
}
テストを無視する
テストを無視するには、 @Ignore
アノテーションをテストに追加し、必要に応じてその理由を持つアノテーションにパラメータを指定します。
@Ignore("Calculator add not implemented yet.")
@Test
public void testPlus() {
assertEquals(5, calculator.add(2,3));
}
テストのコメントや@Test
アノテーションの削除と比較して、テストランナーはこのテストを報告し、無視されることに注意してください。
JUnit 仮定を使用して条件付きでテストケースを無視することもできます。サンプルユースケースは、特定のバグが開発者によって修正された後にのみ、テストケースを実行することです。例:
import org.junit.Assume;
import org.junit.Assert;
...
@Test
public void testForBug1234() {
Assume.assumeTrue(isBugFixed(1234));//will not run this test until the bug 1234 is fixed
Assert.assertEquals(5, calculator.add(2,3));
}
デフォルトのランナーは、失敗した前提を無視したテストを扱います。他のランナーが異なる動作をする可能性があります。たとえば、合格とみなして扱います。
JUnit - 基本的なアノテーションの例
理解しておくべき基本的なJUnit注釈がいくつかあります:
@BeforeClass – Run once before any of the test methods in the class, public static void
@AfterClass – Run once after all the tests in the class has been run, public static void
@Before – Run before @Test, public void
@After – Run after @Test, public void
@Test – This is the test method to run, public void