イントロダクション
今までに触れたことのない技術(OpenCvなど)を使おうと思ったら色々と動かしてみたいのが人情、そんな時に使えるフレームワークの使い方を記載します。
その名はJUnitです。
具体的には、参考資料、参考サイトなどを見ながらプログラムを作成する、作成したプログラムの。。。
- メソッドのみを動かす。
- 全体を動かす。
- 一部切り出して動かす。
上記のことが、本体プログラムに影響せず実行できるところが良いところです。
JUnit
JUnitは、「テスト用のフレームワーク」として有名なものです。「テスティングフレームワーク」という言い方が多いと思います。
英語で「Testing framework」といえばなんとなくわかるけど、日本語だとなんか別な意味があるのでは?と疑ってしまうのは筆者だけでしょうか?
とりあえず、『いろんな言い方をして混乱するのは良くない』といいたいだけです。失礼。。。
この記事のタイトルにある「テストスイート」という言葉も「テストケース」を意味するものです。JUnitでの「@Test」のついたメソッドのことです。
色々な言い方があり混乱してしまいがちですが「何を指しているのか?」に注意すればあまり混乱しないと思います。
JUnitの概要
JUnit(本家サイトへのリンクです)は、ズバリ「アノテーション『\@』」でテストの準備、テスト、テストの後始末をっコントロールできる便利なフレームワークです。いろんな書籍でいろいろ書いていると思いますが、基本は「\@Test」「/@Before」「\@After」のアノテーションをつければ動きます。もっと言うと「\@Test」アノテーションのみでよいです。※今回実装したJUNIT5ではBeforEach, AfterEachのように名前が変わっています。
JUnitの設定方法
Mavenを使用して、pom.xmlに以下のような記述を追加、再ビルド(Mavenビルド)を行う。"dependencies"タグの中に追加する
タグの階層があるので、ちょっと混乱しがちですが、projectタグの直下に記述します。
<dependencies>
<!-- この部分がJUNITの記述 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
</dependencies>
追伸、ほかのOpenCVとかLWJGLなどもこのdependenciesタグの中に追記します。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jp.zenryokuservice</groupId>
<artifactId>TextRPG</artifactId>
<version>0.8-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.objecthunter</groupId>
<artifactId>exp4j</artifactId>
<version>0.4.8</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
コードの実行
ズバリ、「@Test」をメソッドの頭につけるだけです。
import jp.zenryoku.practice.sample.SampleLv1Hello;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.Assert.assertEquals;
/**
* サンプルテストクラス
*/
public class SampleTest {
/** テスト対象クラス */
private SampleLv1Hello target;
/** テストの準備 */
@BeforeEach
public void init() {
target = new SampleLv1Hello();
}
@Test
public void test01() {
System.out.println("Hello JUnit");
target.testMethod();
}
@Test
public void test02() {
target.testMethod(1, 2);
target.testMethod(4, 9);
target.testMethod(5,8);
target.testMethod(6, 7);
}
@Test
public void test03() {
// 返却値が正しいか確認する
assertEquals(2, target.testMethod(1, 1, true));
assertEquals(2, target.testMethod(5, 3, false));
assertEquals(3, target.testMethod(1, 1, true));
}
}
Javaで開発をしていたらすぐに目にすると思うのですが、改めて使い方をみてみようと思います。
<作業動画>
手順(Eclipse)
- EclipseにJUnit4(JARファイル)をビルドパスにつなぐ
- テストクラスを作る
- 実行する
- あとは色々といじって遊ぶ
サンプルコード(JUnit4 ※古い)
import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import org.opencv.core.Mat; import zenryokuservice.gui.lwjgl.kakeibo.opnecv.ReceiptCv; /** JUnit4を使う宣言 */ @RunWith(JUnit4.class) public class ReceiptCvTest { /** テスト対象のクラスをフィールドで保持する */ private ReceiptCv test; /** * Bforeアノテーションで各テストを実行する前に * 実行するメソッド * テストのためのデータセットを用意したり、クラスの呼び出しを行なったりする */ @Before public void setup() { test = new ReceiptCv(); } @After public void terminated() { // テストの終了処理(メモリ開放) test = null; } /** テストケース1 */ @Test public void test1() { test.helloCv(); } /** テストケース2 */ @Test public void test2() { // イメージファイルを読んでみる Mat matrix = test.loadImg("download-1.jpg"); System.out.println(matrix.dump()); } }
テストケースの考え方
じゃんけんゲームを作成しているときに、入力チェックのメソッドを作成したとき。
このメソッドをテストするための「テストケース」を作成するときのことを解説しています。
関連ページ一覧
Java Basic
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜