[Seasar-user:216] Filter & QueryTest

B isid.co.jp Yasuo Higa higa
2003年 11月 27日 (木) 15:41:00 JST


ひがです。

あまり知られていないと思いますが、Nazunaには、
executeQueryの結果をフィルタリングする機能があります。
List rows = Nazuna.executeQuery(...);
List results = NazunaUtil.filter(rows, "item.deptno = 20");

現状は、上記のようにitem.が決めうちですが、これを
"deptno = 20"のようにしたいのですが良いでしょうか。

これは、次にリリース予定であるQueryTestの布石です。
QueryTestとは、テーブルの中身(ルールの実行結果)を
簡単に検証する機能で、NazunaUnitCaseの中で使われる
機能です。

test/petmarket/rule/user/AddUserQueryTest.xml
<queryTest>
    <include className="petmarket.rule.user.AddressTypes"/>

    SELECT u.useroid, u.email, u.password,
        a1.street1 as homestreet1,
        a2.street1 as shippingstreet1,
        c.creditcardnumber
    FROM userinfo u, address a1, address a2, creditcard c
    WHERE email = 'hoge'
        AND a1.useroid = u.useroid AND a1.addresstype = ${HOME}
        AND a2.useroid = u.useroid AND a2.addresstype = ${SHIPPING}
        AND c.useroid = u.useroid

    <assertEquals desc="1" expected="1" actual="rows.length"/>
    <row index="0">
        <assertTrue desc="2" expr="useroid is not null"/>
        <assertEquals desc="3" expected="'hogepassword'" actual="password"/>
    </row>
</queryTest>

class AddUserTest extends NazunaTestCase {

    public void testExecute() throws Exception {
        ...
        Nazuna.execute("petmarket.rule.user.AddUser", "hoge", "hogepassword");
        queryTest("test.petmarket.rule.user.AddUserQueryTest");
    }
}

このとき、assertEqualsタグのactual属性やassertTrueタグのexpr属性で、
プロパティ名を直接使いたいためです。
ちなみに、testXxx()の直前にトランザクションが開始され、
testXxx()の直後にトランザクションがロールバックされるため、
てすとの影響を他に与えずに何度も同じテストを繰り返すことができます。

よろしくお願いします。
---
Yasuo Higa <[E-MAIL ADDRESS DELETED]>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.



Seasar-user メーリングリストの案内