Oct 23, 2007

jMock で java.sql.Connection のモックオブジェクト生成にチャレンジ

JMock で java.sql.Connection のモックオブジェクト作成に挑戦してみた。 ・・・と言っても、まだ jMock のサンプルを眺めただけ。

jMock
http://www.jmock.org/

サンプルコード - その1

とりあえず基礎の基礎。 単純な java.sql.Connection のモックオブジェクトを作成してみた。 example1 はテスト成功パターン。example2 はテスト失敗パターン。

package jp.in_vitro.codelets.jmock;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import org.jmock.Expectations;
import org.jmock.Mockery;

public class Codelet {

    public static void main(String[] args) throws SQLException {
        Codelet me = new Codelet();
        me.example0();
        me.example1();
    }

    protected void example0() throws SQLException {
        Mockery context = new Mockery();
        final Connection connection = context.mock(Connection.class);
        context.checking(new Expectations() {
            {
                one(connection).close();
            }
        });

        connection.close();
        context.assertIsSatisfied();
    }

    protected void example1() throws SQLException {
        Mockery context = new Mockery();
        final Connection connection = context.mock(Connection.class);
        context.checking(new Expectations() {
            {
                one(connection).close();
            }
        });

        // connection.close();
        context.assertIsSatisfied();
    }
}

サンプルコード - その2

次に java.sql.Connection から java.sql.Statement を返してみた。 とりあえず指定した java.sql.Statement を java.sql.Connection#createStatement から返すことに成功。

package jp.in_vitro.codelets.jmock;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import org.jmock.Expectations;
import org.jmock.Mockery;

public class Codelet {

    public static void main(String[] args) throws SQLException {
        Codelet me = new Codelet();
        me.example2();
    }

    protected void example2() throws SQLException {
        Mockery context = new Mockery();
        final Connection connection = context.mock(Connection.class);
        final Statement expected = context.mock(Statement.class);
        context.checking(new Expectations() {
            {
                one(connection).createStatement();
                will(returnValue(expected));
            }
        });

        Statement actual = connection.createStatement();
        System.out.println("expected: " + expected + "@" + expected.hashCode());
        System.out.println("actual: " + actual + "@" + actual.hashCode());
        context.assertIsSatisfied();
    }
}

TrackBack ping me at
http://www.in-vitro.jp/blog/index.cgi/Library/20071023_01.trackback
Post a comment

writeback message: Ready to post a comment.