JavaA2Z

KAB-studio > プログラミング > JavaA2Z > JUnitとは

JUnit

日本語 Java単体テスト
英語 java unit test
ふりがな じぇーゆにっと、じぇぃゆにっと
フリガナ ジェーユニット、ジェィユニット

解説

単体テストうためのフレームワーク
値をチェックするためのassertEquals()メソッド等を持ち、テストをメソッドを自動的に呼ぶ機能を持つTestCaseクラス等を含む、フリーのライブラリ
テストファーストうためには必須のライブラリである。
 
単純にプログラムのテストをプログラムを作るだけであれば、どのようなプログラムを作ってもいい。
だが、JUnitはテスト用フレームワークとして一般に広まっているため、JUnitを使用してテストプログラムを作ることで多くのメリットが得られる。
たとえばEclipseではJUnitのテストの実を標準で備えている。
また、単体テストの性質上、多くのプログラマー実装するものであり、その個人差を大幅に減らすことで可読性やメンテナンス性を高めることができる。認知度の高さにより、推奨や徹底もしやすい。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    /**
    *   テスト対象のメソッド。
    */
    public int plus( int iL, int iR )
    {
        return iL + iR;
    }

    /**
    *   テスト対象のメソッド(バグってる版)。
    */
    public int minus( int iL, int iR )
    {
        return iR - iL;
        // 間違えて逆に引いています。
    }
}


// Tester.java
import junit.framework.Test;
import junit.framework.TestSuite;

/**
*   このクラスを使うために、junit.jarに
*   クラスパスを通してください。junit.jarは
*   Junitをダウンロードしてくれば入っているはずです。
*/

/**
*   各テストメソッドを呼び出すクラス。
*
*   コンパイルを通すために、junit.jarにクラスパスを
*   通してください。junit.jarはEclipseに付いていますが、
*   最新版をダウンロードした方がいいでしょう。
*
*   Eclipseで実行する場合、メニューの【実行】-【デバッグ】の
*   【起動構成】から【JUnit】を選び【新規】で新規作成し、
*   【テスト・クラス】でこのクラスを指定してください。
*
*/
public class Tester
{
    /**
    *   JUnitから呼ばれるメソッド。
    *   main()メソッドみたいなものです。
    */
    public static Test suite()
    {
        // テストを登録するためのTestSuiteを作ります。
        TestSuite suite = new TestSuite();

        // テストケースを追加します。
        // このクラスのtestメソッドが呼ばれます。
        suite.addTestSuite( SampleTest.class );

        // TestSuite を返します。
        // この中に登録したテストクラスが実行されます。
        return suite;
    }
}


// SampleTest.java
import junit.framework.TestCase;

/**
*   Sampleクラスのテストクラスです。
*/
public class SampleTest extends TestCase
{
    /**
    *   コンストラクタ。
    */
    public SampleTest()
    {
        // クラス名をセットします。
        super( SampleTest.class.toString() );
    }

    /**
    *   Sample#plus()メソッドをテストします。
    */
    public void testPlus() 
    {
        Sample sample = new Sample();
        int result = sample.plus( 2, 1 );
        // 結果をチェックします。
        // 第1引数に「予想される結果」を、
        // 第2引数にテスト対象の変数を渡します。
        assertEquals( 3, result );
        // 結果が一致しているので何も起きません。
    }

    public void testMinus() 
    {
        Sample sample = new Sample();
        assertEquals( 1, sample.minus( 2, 1 ) );
        // junit.framework.AssertionFailedError: expected:<1> but was:<-1>
        //     at junit.framework.Assert.fail(Assert.java:47)
        //     at junit.framework.Assert.failNotEquals(Assert.java:282)
        //     at junit.framework.Assert.assertEquals(Assert.java:64)
        //     at junit.framework.Assert.assertEquals(Assert.java:201)
        //     at junit.framework.Assert.assertEquals(Assert.java:207)
        //     at SampleTest.testMinus(SampleTest.java:26)
        //     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        //     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        //     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        //     at java.lang.reflect.Method.invoke(Method.java:324)
        //     at junit.framework.TestCase.runTest(TestCase.java:154)
        //     at junit.framework.TestCase.runBare(TestCase.java:127)
        //     at junit.framework.TestResult$1.protect(TestResult.java:106)
        //     at junit.framework.TestResult.runProtected(TestResult.java:124)
        //     at junit.framework.TestResult.run(TestResult.java:109)
        //     at junit.framework.TestCase.run(TestCase.java:118)
        //     at junit.framework.TestSuite.runTest(TestSuite.java:208)
        //     at junit.framework.TestSuite.run(TestSuite.java:203)
        //     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:392)
        //     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:276)
        //     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:167)

        // 結果が異なっているとこのように例外が発生します。
        // 最初の一文の「expected:<1> but was:<-1>」は、
        // 「期待した値は1だったけど、実際には-1だった」という意味です。
    }

    /**
    *   関係ないメソッド。"test"から始まらない
    *   メソッドは関係ありません。
    */
    public void output()
    {
        System.out.println( "output()" );
    }
}
// Sample.java
public class Sample
{
    /**
    *   テスト対象のメソッド。
    */
    public int plus( int iL, int iR )
    {
        return iL + iR;
    }

    /**
    *   テスト対象のメソッド(バグってる版)。
    */
    public int minus( int iL, int iR )
    {
        return iR - iL;
        // 間違えて逆に引いています。
    }
}


// Tester.java
import junit.framework.Test;
import junit.framework.TestSuite;

/**
*   このクラスを使うために、junit.jarに
*   クラスパスを通してください。junit.jarは
*   Junitをダウンロードしてくれば入っているはずです。
*/

/**
*   各テストメソッドを呼び出すクラス。
*
*   コンパイルを通すために、junit.jarにクラスパスを
*   通してください。junit.jarはEclipseに付いていますが、
*   最新版をダウンロードした方がいいでしょう。
*
*   Eclipseで実行する場合、メニューの【実行】-【デバッグ】の
*   【起動構成】から【JUnit】を選び【新規】で新規作成し、
*   【テスト・クラス】でこのクラスを指定してください。
*
*/
public class Tester
{
    /**
    *   JUnitから呼ばれるメソッド。
    *   main()メソッドみたいなものです。
    */
    public static Test suite()
    {
        // テストを登録するためのTestSuiteを作ります。
        TestSuite suite = new TestSuite();

        // テストケースを追加します。
        // このクラスのtestメソッドが呼ばれます。
        suite.addTestSuite( SampleTest.class );

        // TestSuite を返します。
        // この中に登録したテストクラスが実行されます。
        return suite;
    }
}


// SampleTest.java
import junit.framework.TestCase;

/**
*   Sampleクラスのテストクラスです。
*/
public class SampleTest extends TestCase
{
    /**
    *   コンストラクタ。
    */
    public SampleTest()
    {
        // クラス名をセットします。
        super( SampleTest.class.toString() );
    }

    /**
    *   Sample#plus()メソッドをテストします。
    */
    public void testPlus() 
    {
        Sample sample = new Sample();
        int result = sample.plus( 2, 1 );
        // 結果をチェックします。
        // 第1引数に「予想される結果」を、
        // 第2引数にテスト対象の変数を渡します。
        assertEquals( 3, result );
        // 結果が一致しているので何も起きません。
    }

    public void testMinus() 
    {
        Sample sample = new Sample();
        assertEquals( 1, sample.minus( 2, 1 ) );
        // junit.framework.AssertionFailedError: expected:<1> but was:<-1>
        //     at junit.framework.Assert.fail(Assert.java:47)
        //     at junit.framework.Assert.failNotEquals(Assert.java:282)
        //     at junit.framework.Assert.assertEquals(Assert.java:64)
        //     at junit.framework.Assert.assertEquals(Assert.java:201)
        //     at junit.framework.Assert.assertEquals(Assert.java:207)
        //     at SampleTest.testMinus(SampleTest.java:26)
        //     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        //     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        //     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        //     at java.lang.reflect.Method.invoke(Method.java:324)
        //     at junit.framework.TestCase.runTest(TestCase.java:154)
        //     at junit.framework.TestCase.runBare(TestCase.java:127)
        //     at junit.framework.TestResult$1.protect(TestResult.java:106)
        //     at junit.framework.TestResult.runProtected(TestResult.java:124)
        //     at junit.framework.TestResult.run(TestResult.java:109)
        //     at junit.framework.TestCase.run(TestCase.java:118)
        //     at junit.framework.TestSuite.runTest(TestSuite.java:208)
        //     at junit.framework.TestSuite.run(TestSuite.java:203)
        //     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:392)
        //     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:276)
        //     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:167)

        // 結果が異なっているとこのように例外が発生します。
        // 最初の一文の「expected:<1> but was:<-1>」は、
        // 「期待した値は1だったけど、実際には-1だった」という意味です。
    }

    /**
    *   関係ないメソッド。"test"から始まらない
    *   メソッドは関係ありません。
    */
    public void output()
    {
        System.out.println( "output()" );
    }
}

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/07/15
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。