[cubby-user:73] CubbyTestCase における、InternalForwardRequest のコピーについてのご報告

Takashi Someda [E-MAIL ADDRESS DELETED]
2008年 6月 12日 (木) 12:35:13 JST


染田です。

またまた懲りずにテストネタですみません。。。

CubbyTestCase#routing 内で行われている、InternalForwardRequest
から、S2TestCase 内の MockHttpServletRequestImpl へのコピーについて
ご報告です。

上記で Beans.copy をしているのですが、その際に serverName や
serverPort、scheme など、諸々の情報が、MockHttpServletContext#createRequest
で生成されている、MockHttpServletRequestImpl のデフォルト値によって上書きされています。

その為、アクションの中で、上記のような情報に基づいて行き先を振り分けるような
処理をしている部分で意図どおりのテストが出来ない部分がありました。
# ちなみに、私はアプリケーション内のリファラであるかを、ヘッダや諸々から判別し
# 行き先を振り分ける処理をアクションレイヤでしているところで捕まりました。

手元では、

    private static String[] EXCLUDES_PROPERTIES;
    static {
        List<String> list = new ArrayList<String>();
        BeanDesc beanDesc =
BeanDescFactory.getBeanDesc(MockHttpServletRequestImpl.class);
        for (int i = 0; i < beanDesc.getPropertyDescSize(); i++) {
            PropertyDesc propDesc = beanDesc.getPropertyDesc(i);
            if (propDesc.isReadable() && propDesc.isWritable()) {
                String propName = propDesc.getPropertyName();
                if(!"queryString".equals(propName)){
                    list.add(propDesc.getPropertyName());
                }
            }
        }
        EXCLUDES_PROPERTIES = list.toArray(new String[list.size()]);
    }

のような感じで、コピー対象外のプロパティを集めた後(queryString は除外/setter/getter
があるもののみ)、routing 内での Beans.copy を

        Beans.copy(internalForwardRequest, getRequest())
                .excludes(EXCLUDES_PROPERTIES)
                .execute();

として回避しています。

Cubby 1.0.2 で確認しました。
# ざっとソースを確認したところ 1.0.3 でも出るようにも思います。
ケースとしては、少ないのかもしれませんが、コントローラレイヤ
ですので、この辺りのリクエストの情報を参照して処理するケースも
あるのかな、と思いご報告させてもらいました。

以上です。
-- 
SOMEDA Takashi
[E-MAIL ADDRESS DELETED]
http://tuigwaa.sandbox.seasar.org


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