2012年9月10日月曜日

PL/Unit による PL/SQL コードのユニットテスト

PL/Unitというテスティングフレームワークを見つけたので使ってみた。結構お手軽にテストできたので、紹介してみる。
意外とこの PL/Unit を紹介しているページが無いのが残念だ。 しかし、手順は簡単なので、PL/SQL でプログラミングすることがある人には試してもらいたい。(品質的な意味で)

準備

PL/Unit - Test Driven Development for Oracle から ZIP ファイルをダウンロードした後、中身の install_plunit.sql を実行。
インストールのページ にもあるように、データディクショナリを参照するため、権限を持ったユーザで接続する。 結果として、plunit というパッケージが作成される。

テンプレ

最低一つのパッケージが必要。
PACKAGE には setup, teardown, t_{テスト名} を列挙。 PACKAGE BODY には t_{テスト名} の定義を列挙。
teardown には rollback; を入れるといいと思う。

PACKAGE

create or replace package TEST_HOGEHOGE is
begin
    procedure setup;
    procedure teardown;

    procedure t_order_and_cancel;
    procedure t_order_and_modify;
    procedure t_order_cant_modify_after_shipping;
end;
/
show errors

PACKAGE BODY

create or replace package body TEST_HOGEHOGE is
    -- ヘルパー関数など
begin
    procedure setup is
    begin
        update Stock set amount=10 where item_no = '...';
    end;

    procedure teardown is
    begin
        rollback;
    end;

    procedure t_order_and_cancel is
        result number;
    begin
        result := process_order(MY_ORDER_PKEY);
        plunit.assert_equals(0, result, 'order successes');

        plunit.assert_query_equals_value(
                'select amount from Stock where item_no=''hogehoge'' ',
                3,
                '3 hogehoges are still in stock');

        result := process_cancel(MY_ORDER_PKEY);
        plunit.assert_equals(0, result, 'cancel successes');
        -- :
    end;
end;
/
show errors

テストスイート起動

テストの実施に際し、PL/Unit のサイトにはApollo Proというフリーのツールを使うように書いてあるが、WinXP SP3 (32bit)の環境では動かなかった。
コマンドラインからの起動は、SQL*Plusから以下のようにすれば良い。
execute plunit.run_all_tests(owner=>'SCOTT', package_name=>'TEST_HOGEHOGE', show_output=>true);

実行すると、t_ 関数毎にテストの成否が列挙される。
で、仕上げに「The following tests failed:」ということで、失敗したテストが表示される。 実用上それほど問題にはならないが、この内容、最後に失敗したテストだけが表示されているようだ。 テスト数が多いと、失敗したテストを探すのに若干手間取るかもしれない。

0 件のコメント: