Psalm

プログラマ向け技術メモ

JTest(JUnit)のスタブの書き方。

2010-11-16 15:25:16 | お知らせ
めも。

doGet()メソッドの試験をする場合。
HTTP関連のクラスはXXXXAdapterが用意されている。

テストメソッド例:

public void testDoGet1() throws Throwable {
 HttpServletRequestAdapter httpServletRequestAdapter = new HttpServletRequestAdapter();
 httpServletRequestAdapter.addParameter("type", "1");
 HttpServletResponseAdapter httpServletResponseAdapter = new HttpServletResponseAdapter();
 MainServlet testedObject = new MainServlet();

 testedObject.doGet(httpServletRequestAdapter, httpServletResponseAdapter);
}

スタブ例:

public Object stubsDoGet1(Member method, Object _this, Object[] args) throws Throwable {
 Class[] argument_types;
 if (Stubs.matches(method, クラス名.class)) {
  argument_types = new Class[] { 引数のクラス名.class };
  if (Stubs.matches(method, "メソッド名", argument_types)) {

   // 複数回呼ばれるメソッドで異なる結果を返したい場合は_stubs_iterationを利用
   int index = _stubs_iteration.getIterationCount("java.io.BufferedReader.readLine()");
   switch (index) {
    case 1:
     return "test";
    default:
     return Stubs.NO_STUB_GENERATED;
   }
  }
 }
 return Stubs.NO_STUB_GENERATED;
}

_stubs_iterationを使う場合は、setUp()メソッドに次の1行を追加。

_stubs_iteration = new jtest.StubIterationCounter();

更に、テストクラス内で_stubs_iterationの宣言をしておくこと。

private jtest.StubIterationCounter _stubs_iteration;



ちなみに。
privateメソッドの場合は、JT.invokeを使用。

MainServlet testedObject = new MainServlet();
JT.invoke(MainServlet.class, testedObject, "privateMethod",
   new Object[] { "string" }, new Class[] { String.class });

1 コメント

コメント日が  古い順  |   新しい順
Unknown (師子乃)
2018-10-31 21:00:51
初めまして。

勉強させていただきます!
返信する