TestCase
| 日本語 | 試験例 |
| 英語 | test case |
| ふりがな | てすとけーす |
| フリガナ | テストケース |
単体テストプログラムを実装するためのクラス。
JUnitに含まれるクラスのひとつ。パッケージも含めたクラス名はjunit.framework.TestCase。
通常、テスト対象のクラス1つにつき、そのクラスの最後に「Test」を付けたクラス名のクラスを作り、そのクラスをTestCaseクラスのサブクラスとする。
テスト対象のメソッドひとつにつき、そのメソッドの頭に「test」を付けたメソッド名のメソッドを作る。そのメソッドは、テスト実行時に自動的に呼び出される。
値が正しいかどうかのチェックはassertEquals()メソッド等で行う。これらのメソッドは「正しい値」と「チェックする変数」を比較し、値が一致すればなにもせず、値が異なっている場合に例外を発生し、その際、どの値が異なっているのかを明確に出力する。
テストの実行は、Eclipseのデバッグ実行等でこのクラスを直接指定するか、TesterクラスのaddTestSuite()メソッドでTestCaseクラスのサブクラスを指定する。
JUnitに含まれるクラスのひとつ。パッケージも含めたクラス名はjunit.framework.TestCase。
通常、テスト対象のクラス1つにつき、そのクラスの最後に「Test」を付けたクラス名のクラスを作り、そのクラスをTestCaseクラスのサブクラスとする。
テスト対象のメソッドひとつにつき、そのメソッドの頭に「test」を付けたメソッド名のメソッドを作る。そのメソッドは、テスト実行時に自動的に呼び出される。
値が正しいかどうかのチェックはassertEquals()メソッド等で行う。これらのメソッドは「正しい値」と「チェックする変数」を比較し、値が一致すればなにもせず、値が異なっている場合に例外を発生し、その際、どの値が異なっているのかを明確に出力する。
テストの実行は、Eclipseのデバッグ実行等でこのクラスを直接指定するか、TesterクラスのaddTestSuite()メソッドでTestCaseクラスのサブクラスを指定する。
参考サイト
// 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クラスのテストクラスです。
* SampleクラスのテストクラスなのでSampleTestです。
* TestCaseクラスのサブクラスにします。
*/
public class SampleTest extends TestCase
{
/**
* コンストラクタ。
*/
public SampleTest()
{
// クラス名をセットします。
super( SampleTest.class.toString() );
}
/**
* Sample#plus()メソッドをテストします。
* この、頭にtestが付いているメソッドが
* テストメソッドとみなされて自動的に
* 呼び出されます。
*/
public void testPlus()
{
Sample sample = new Sample();
int result = sample.plus( 2, 1 );
// assertEquals()メソッドで結果をチェックします。
// 第1引数に「予想される結果」を、
// 第2引数にテスト対象の変数を渡します。
assertEquals( 3, result );
// 結果が一致しているので何も起きません。
// assertEquals()メソッドの他に、assertFalse()や
// assertNull()といったメソッドでチェックすることも
// できます。
}
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()" );
}
}
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クラスのテストクラスです。
* SampleクラスのテストクラスなのでSampleTestです。
* TestCaseクラスのサブクラスにします。
*/
public class SampleTest extends TestCase
{
/**
* コンストラクタ。
*/
public SampleTest()
{
// クラス名をセットします。
super( SampleTest.class.toString() );
}
/**
* Sample#plus()メソッドをテストします。
* この、頭にtestが付いているメソッドが
* テストメソッドとみなされて自動的に
* 呼び出されます。
*/
public void testPlus()
{
Sample sample = new Sample();
int result = sample.plus( 2, 1 );
// assertEquals()メソッドで結果をチェックします。
// 第1引数に「予想される結果」を、
// 第2引数にテスト対象の変数を渡します。
assertEquals( 3, result );
// 結果が一致しているので何も起きません。
// assertEquals()メソッドの他に、assertFalse()や
// assertNull()といったメソッドでチェックすることも
// できます。
}
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クラスのテストクラスです。
* SampleクラスのテストクラスなのでSampleTestです。
* TestCaseクラスのサブクラスにします。
*/
public class SampleTest extends TestCase
{
/**
* コンストラクタ。
*/
public SampleTest()
{
// クラス名をセットします。
super( SampleTest.class.toString() );
}
/**
* Sample#plus()メソッドをテストします。
* この、頭にtestが付いているメソッドが
* テストメソッドとみなされて自動的に
* 呼び出されます。
*/
public void testPlus()
{
Sample sample = new Sample();
int result = sample.plus( 2, 1 );
// assertEquals()メソッドで結果をチェックします。
// 第1引数に「予想される結果」を、
// 第2引数にテスト対象の変数を渡します。
assertEquals( 3, result );
// 結果が一致しているので何も起きません。
// assertEquals()メソッドの他に、assertFalse()や
// assertNull()といったメソッドでチェックすることも
// できます。
}
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()" );
}
}




