気になる開発プロダクツ

第4回 JsTester 1.4

この記事を読むのに必要な時間:およそ 5.5 分

テストケースの作成(その2)-JUnit 4.3対応

次にJUnit4.3に対応したテストケースを作成してみます。JUnit4では,テストを行うメソッドに@Testテスト前の処理を行うメソッドに@Beforeテスト後の処理を行うメソッドに@Afterというアノテーションを付記することになっています。ですから,JDK5以上の環境でなければ実行することはできません。これによりTestCaseを継承する必要がなくなりました。そして,GUIインターフェースのTestRunnerは存在しません。EclipseなどでJUnitのテストケースを実行できるようになりましたので,サポートする必要がなくなったと判断されたのでしょう。

リスト4にテストケースの例を示します。テストの内容はリスト2と同様です。実行結果では,testCalcDivメソッドによるテストが失敗していることがわかります。実行にはJDK5,JUnit4.3が必要です。そしてリスト2の場合同様にCommons LoggingとMozilla RhinoのJARファイルをクラスパスに追加しておきます。

リスト4 JUnit4.3対応のテストケース(例)

import net.sf.jstester.JsTester;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class JsTesterJUnit43Test  {

  private JsTester jsTester;

  @Test
  public void assertIsFunction() {
    jsTester.assertIsFunction( "関数ですか?", "func1" );
  }

  @Test
  public void assertIsObject() {
    jsTester.assertIsObject( "オブジェクトですか?", "exmp" );
  }

  @Test
  public void testExample()  {
    jsTester.assertEquals( "exmp.add(3,2)", "5" );
  }

  @Test
  public void assertIsEmpty() {
    jsTester.assertIsEmpty( "空ですか?", "objCalc" );
  }

  @Test
  public void testCalcDiv()  {
    jsTester.assertIsString( "objCalc.divide(6,3)" );
  }

  @Before
  public void setUp() throws Exception {
    jsTester = new JsTester();
    jsTester.onSetUp();
    jsTester.eval( JsTester.loadScript( "test.js" ) );
  }

  @After
  public void tearDown() throws Exception {
    jsTester.onTearDown();
  }

}

図2 リスト4の実行結果

JUnit version 4.3.1
.....E
Time: 1.602
There was 1 failure:
1) testCalcDiv(JsTesterJUnit43Test)
net.sf.jstester.util.JUnit4JsAssertionError:
  .......... エラーメッセージ ..........
FAILURES!!!
Tests run: 5,  Failures: 1

テストケースの作成(その3)-TestNG5.6対応

最後に,TestNG5.6に対応したテストケースを作成します。TestNGはJUnit4と同様に,メソッドにアノテーションを付記することでメソッドの役割を認識します。テストを行うメソッドは@Testテストの前処理を行うメソッドは@BeforeMethodテストの後処理を行うメソッドは@AfterMethodです。

リスト5にテストケースの例を示します。ここでも@BeforeMethodを付記したメソッドではjsTester#onSetUp(),@AfterMethodを付記したメソッドではjsTester#onTearDown()の各メソッドを実行しています。実行結果はコンソールにも表示されるほか,HTMLファイルも生成されますので,図4のようにWebブラウザで閲覧することができます。

リスト5 TestNG5.6対応のテストケース(例)

import net.sf.jstester.JsTester;

import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class JsTesterTestNG56Test  {

  private JsTester jsTester;

  @Test
  public void assertIsFunction() {
    jsTester.assertIsFunction( "関数ですか?", "func2" );
  }

  @Test
  public void assertIsObject() {
    jsTester.assertIsObject( "オブジェクトですか?", "exmp" );
  }

  @Test
  public void testExample()  {
    jsTester.assertEquals( "exmp.add(3,2)", "5" );
  }

  @Test
  public void assertIsEmpty() {
    jsTester.assertIsEmpty( "空ですか?", "objCalc" );
  }

  @Test
  public void testCalcDiv()  {
    jsTester.assertIsString( "objCalc.divide(6,3)" );
  }

  @BeforeMethod
  protected void init() throws Exception {
    jsTester = new JsTester();
    jsTester.onSetUp();
    jsTester.eval( JsTester.loadScript( "test.js" ) );
  }

  @AfterMethod
  protected void finish() throws Exception {
    jsTester.onTearDown();
  }

}

図3 リスト5の実行結果

[Parser] Running:
  Command line suite

===============================================
Command line suite
Total tests run: 5, Failures: 1, Skips: 0
===============================================

図4 リスト5の実行結果(HTML)

図4 リスト5の実行結果(HTML)


JsTesterでは,このようにテストツールと連携してJavaScriptによるスクリプトのテストが可能です。これからますます機会が増えるであろうAjaxアプリケーション開発の場で活躍することでしょう。

著者プロフィール

沖林正紀(おきばやしまさのり)

SE/プログラマを経て,WebアプリケーションやXMLなどについて雑誌記事や書籍の執筆活動を始める。大手メーカで製品資料の作成や,セミナーの講師を担当したこともある。現在は,取材記事や製品レビューなどに執筆活動の幅を広げる一方,プログラミング教材の開発も手がけている。

著書