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()" ); } }