[Seasar-user:10492] Re: [Teeda] S2Containerを使用したPageクラスのテストについて

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 9月 13日 (木) 03:03:58 JST


小林 (koichik) です.

Date:    Thu, 13 Sep 2007 00:50:45 +0900
From:    matsuda <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:10491] [Teeda] S2Containerを使用したPageクラスのテストについて

> 仕様としましては、コンテナからSessionを取得し、Dtoを格納。
> 次ページでSessionからDtoを取得し、内容を表示するというものです。

本題からはそれますが,Dto も Seasar2 に
お任せにした方がいいのではないでしょうか?

@Component(instance=InstanceType.SESSION)
public class FooDto {
  ...
}

public class AaaPage {
  public FooDto fooDto;

  public Class doHoge() {
    fooDto.setBar("bar");
    return BbbPage.class;
  }
}

public BbbPage {
  public FooDto fooDto;
  public String bar;

  public Class prerender() {
    bar = fooDto.getBar();
    return null;
  }
}

それはさておき,

> 1.AaaPage#doHoge()でDtoがセットされたことをテストメソッドから確認する方
>
S2TestCase (や TeedaTestCase) では
HttpServletRequest や HttpSession のモックが
用意されているので,

public class AaaPageTest extends S2TestCase {
  private AaaPage aaaPage;

  public void testDoHoge() throws Exception {
    aaaPage.doHoge();
    HttpSession session = getRequest().getSession(false);
    assertNotNull(session);
    FooDto fooDto = (FooDto) session.getAttribute("fooDto");
    assertNotNull(fooDto);
    assertEquals("bar", fooDto.getBar();
  }
}

みたいにテストできます.

> 2.BbbPage#prerender()のテストを行う方法
>           (特にSession内のFooDtoにMockを使用する方法)

通常 Dto にモックを使う必要はないのでは?
構造体のようなものだと思うので.
ともあれ (JW),必要なら

public class BbbPageTest extends S2TestCase {
  private BbbPage bbbPage;

  protected void setUpPrerender() throws Exception {
    FooDtoMock mock = new FooDtoMock();
    mock.setBar("bar");
    ...
    getRequest().getSession().setAttribute("fooDto", mock);
  }

  public void testPrerender() throws Exception {
    bbbPage.prerender();
    assertEquals("bar", bbbPage.getBar());
  }
}

のようにできます.

P.S.
上に書いたコードは全部メーラ上で書いただけなので
コンパイルすら通らないかもしれませんがよろしくです.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>




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