xUnit Junit
来源:互联网 发布:jsp和javascript哪个好 编辑:程序博客网 时间:2024/04/26 00:55
JUnitクラスの構造 †
public class XXXTest extends TestCase{ // コンストラクタ public XXXTest(String arg0){ super(arg0); } // テストメソッド // testで始まるメソッド public void testAAAA(){ //テストの内容 // テスト対象のメソッドを実行して // assertXXXX()メソッドで結果を検証 } // 各テストメソッドの初期化処理 public void setUp(){ } // 各テストメソッドの終了処理 public static void tearDown(){ } // このテストクラスの初期化処理 public static void oneTimeSetUp(){ } // このテストクラスの終了処理 public void oneTimeTearDown(){ } // JUnitは、suite()の返り値のTestを実行する // ontTimeSetup() / oneTimeTearDown() を実装する為に // suite()をオーバーライドして、XXXTest.class->TestSuit->TestSetup // でwrapしたものを返す。 public static Test suite() throws Exception { TestSuite suite = new TestSuite(XXXTest.class); TestSetup wrapper = new TestSetup(suite) { public void setUp() throws Exception { oneTimeSetUp(); } public void tearDown() throws Excepiton { oneTimeTearDown(); } }; return wrapper; }}
- テストクラスの名前は、XXXTest にする。バッチテスト?で**Test.javaをテストクラスと見なして全実行するため。
- テストメソッドはtestで始まるテストクラス
- 各テストメソッドの初期化処理はsetUp()に記述する
- 各テストメソッドの終了処理はtearDown()に記述する
- 基本的にtestXXX()内で、処理を行い、assertXXXX()メソッドで結果の検証をする
- JUnit.assertXXXX()メソッドは、期待した結果が得られない場合、AssertionFailedException?が発生する。JUnitフレームワークは何らかのExceptionを受け取るとテストに失敗したものと見なす。
- JUnit(Test Runner)は、suite()から返されるテストを実行する
- 通常(TestCase?#suite())はテストケース自身が返される
- テストクラス全体の初期化/終了処理をするときには、suite()をオーバーライドして、TestCase?->TestSuite?->TestSetup?の順でwrapしたものを返す。
- テストメソッドの実行順序を指定したい時には、以下のように、テストケースのコンストラクタの引数にテストメソッド名を与えてインスタンス化し、TestSuite?に追加する
public static Test suite() throws Exception { TestSuite suite = new TestSuite("XXXクラスのテスト"); suite.addTest( new TestSuite(new XXXTest("testFirst") ) ); suite.addTest( new TestSuite(new XXXTest("testSecond") ) ); suite.addTest( new TestSuite(new XXXTest("testThird") ) ); suite.addTest( new TestSuite(new XXXTest("testEnd") ) ); TestSetup wrapper = new TestSetup(suite) { public void setUp() throws Exception { oneTimeSetup(); } public void tearDown() throws Excepiton { ontTimeTearDown(); } }; return wrapper; }
このとき、各テストメソッド間で持ち回る値を格納したXXXTestクラスのフィールドはstaticにしなければならない事に注意。
起動される各テストメソッドはそれぞれ別のインスタンスのXXXTestクラスのメソッドだから
assertEquals †
assertEqualsは内容が同じかどうかをテストするメソッド
- assertEquals(プリミティブ型 expected, プリミティブ型 actual)
- assertEquals(Object expected, Object actual)
- assertEquals(String expected, String actual)
- assertEquals(String message, プリミティブ型 expected, プリミティブ型 actual)
- assertEquals(String message, Object expected, Object actual)
- assertEquals(String message, String expected, String actual)
- assertEquals(double 期待値, double 実測値, double 許容誤差)
DTOのassertEquals †
DTO*1のAssertEquals?をする時には、toString() メソッドで文字列にできるようにしておくと良い
JUnit: assertEquals( expectedDTO.toString(), actualDTO.toString() )DTO: public class DTO implements Serializable{ private String foo; private float bar; public String toString(){ StringBuffer sbuf = new StringBuffer(); sbuf.append( "foo=" + foo + ","); sbuf.append( "bar=" + bar ); return sbuf.toString(); }}
MapのassertEquals †
key値を辞書順に並べてString型に変換する。以下のメソッドをTestクラスの上位クラスにするなり、ユーティリティクラスをを作成して実装する。
Mapを拡張したDTOをつくるのは・・・やめた方が良い(ツブシが効かないシステムになる)。
public String mapToString( map ){ ArrayList keys = new ArrayList( map.keySet() ); Collections.sort( keys ); StringBuffer sbuf = new StringBuffer(); for( Iterator it = keys.iterator() ; it.hasNext() ; ){ Object key = it.next(); sbuf.append( key ); sbuf.append( "=" ); Object val = map.get( key ); if( val instanceof Map ){ sbuf.append( "{" + mapToString((Map)val) + "}" ); }else sbuf.append( val ); } sbuf.append( "," ); } return sbuf.substring( 0 , sbuf.length()-1 ); // 最後の","を除く}
assertSame/NotSame?†
assertSame/NotSame?は参照が同じか/違うかどうかをテストするメソッド
- assertSame(Object expected, Object actual)
- assertSame(String message, Object expected, Object actual)
- assertNotSame?(Object expected, Object actual)
- assertNotSame?(String message, Object expected, Object actual)
assertTrue/False †
assertTrue/Falseは、結果がtrueか/falseかをテストするメソッド
- assertTrue(boolean condition)
- assertTrue(String message, boolean condition)
- assertFalse(boolean condition)
- assertFalse(String message, boolean condition)
assertNull/NotNull?†
assertNull/NotNull?は、結果がNullか/Nullでないかをテストするメソッド
- assertNull(Object object)
- assertNull(String message, Object object)
- assertNotNull?(Object object)
- assertNotNull?(String message, Object object)
fail †
failは、無条件にテストを失敗させるメソッド
- fail()
- fail(String message)
例外が発生したらテスト合格と見なしたい †
void test(){ try{ Subject sbj = new Subject(); sbj.setParameter( invalidParameter ); sbj.doSomething() // ここで例外発生を期待 fail("SomeExceptionが発生しませんでした"); // 例外が発生していない }catch( SomeException ex ){ ex=null; // SomeExceptionが発生したらテスト合格 } ...(次の検証)...}
JUnitとEcelipseとの連携 †
- Antの実行クラスパスにjunit.jarを加える
[ウィンドウ]→[設定]→[Ant]→[ランタイム]→[グローバル項目]
に、C:\eclipse\pligins\org.junit_3.8.1\junit.jar を加える - Junit Test Caseの生成
テスト対象のクラスを右クリックして
[新規]-[JUnit テスト・ケース] - Junit Test Caseの実行
テストクラスを選択して、
[実行]-[次を実行]-[3.Junitテスト]
テストメソッドに起動順序がある場合の雛形(コピペしてXXXXを置換してください)†
import junit.extensions.TestSetup;import junit.framework.Test;import junit.framework.TestCase;import junit.framework.TestSuite;/** * XXXXのテスト. * <pre> * 1)します * 2)します * 3)します * 4)します * </pre> * @author * @version $Id$ */public class XXXXTest extends TestCase { /** テスト名 */ private static final String TEST_NAME = XXXXTest.class.getName(); /** メソッド名を起動する順に列挙 */ private static final String[] METHODS = {"test1", "test2", "test3"}; /** * コンストラクタ. * * @param arg0 メソッド名 */ public XXXXTest(final String arg0) { super(arg0); } /** テスト1. かならず最初に実行される */ public void test1(){ } /** テスト2. かならず、テスト1の後に実行される */ public void test2(){ } /** テスト3. かならず、テスト1,2の後に実行される */ public void test3(){ } /** * このテストクラスの初期化処理 */ public static void oneTimeSetUp() { } /** * このテストクラスの終了処理 */ public static void oneTimeTearDown() { } /** * JUnitは、suite()の返り値のTestを実行する * ontTimeSetup() / oneTimeTearDown() を実装する為に * suite()をオーバーライドして、XXXTest.class->TestSuit->TestSetup * でwrapしたものを返す。 * * @return TestSuite * @throws Exception 例外 */ public static Test suite() throws Exception { TestSuite suite = new TestSuite(TEST_NAME); for (int cnt = 0; cnt < METHODS.length; cnt++) { suite.addTest(new XXXXTest(METHODS[cnt])); } TestSetup wrapper = new TestSetup(suite) { public void setUp() throws Exception { oneTimeSetUp(); } public void tearDown() throws Exception { oneTimeTearDown(); } }; return wrapper; } /** * 各テストメソッドの開始処理 */ public void setUp() { } /** * 各テストメソッドの終了処理 */ public void tearDown() { }}
- xUnit Junit
- xUnit 测试模式: 摘要
- 单元测试框架xUnit家族
- 单元测试之 Xunit
- xUnit for vs2012/vs2013
- xUnit安装及注意事项
- 《xUnit Test Patterns》学习笔记5 - xUnit基础
- .net单元测试框架xUnit.net
- vs 2013 添加xunit测试
- JUNIT
- junit
- Junit
- JUnit
- JUnit
- JUnit
- JUNIT
- junit
- Junit
- Android应用资源---绘制资源类型(Drawable)(三)
- ubuntu linux shell fork, source and exec 调用执行
- 产后恢复身体应吃哪些水果
- DBUS-GLIB Binding,GLIB事件与DBUS事件是如何关联的
- 枸杞功效多,这样吃效果翻倍
- xUnit Junit
- PKU-程序设计实习-MySort函数
- ACE_Thread_Manager
- 美味水果变天然美容排毒剂
- c++_main
- 专家教你五步选购营养果汁
- PKU-程序设计实习-Myistream_iterator
- Google背后的分布式计算架构策略
- spring依赖注入(DI)