- PR -

サーブレットのテスト(JUnit)で自分でMockObjectを作成できずに困ってます。

1
投稿者投稿内容
ダメ猫
常連さん
会議室デビュー日: 2004/02/20
投稿数: 45
投稿日時: 2004-03-01 18:49
「前回StrutsTestCase for JUnitでテストケースの作成」の質問をさせていただきましたが、
「JUnitのみでMockObjectを使いサーブレットコンテナを作りJUnitを実行するテストケース」を作れと言われ調べましたがほとんどのサイトが「StrutsTestCase for JUnit」か「cactus」でのテストケースばかりでJUnitのみの作成方法が見つかりません。
どなたか教えていただけませんでしょうか?

まったくのゼロからの質問で申し訳ございません
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-03-01 21:49
「JUnitのみで作れ」っていうのは偉い人からのお勉強の課題でしょうか?
よけいなお世話ですが、だとすればそれを自分で考えずにここで聞くのはあまり適切ではない気がします。偉い人はわかっているんでしょうし・・・。

StrutsTestCase は動いたのでしょうか?動いたのなら、それを参考にしてみてはいかがでしょうか?
あと、具体的に何がわからないのかがわからないと答えにくいです。
訪ね方を工夫するとすばやく分かりたいことが出てくると思いますよ。
ダメ猫
常連さん
会議室デビュー日: 2004/02/20
投稿数: 45
投稿日時: 2004-03-02 11:07
返信ありがとうございます。

ではもう一度自分の力でがんばってみます。
StrutsTestCaseは動く前にそれは使わずにと言われたので実はまだ動いていません。
「MockObjectを使いサーブレットコンテナを作る」の参考サイトがなかなか見つからずに
どうすれば良いのかわからなかったのでヒントでもと思い此処に書かせていただきました
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2004-03-02 11:55
やりたいことをまとめるとこんな感じですか?
・サーブレットの単体テストをしたい。
・テスト対象はStrutsを使っていない。
・CactusのようにインコンテナではなくMockobject方式でしたい。

そうするとこの辺を調べるといいんじゃないでしょうか。
http://www.mockobjects.com/wiki/
http://mockobjects.sourceforge.net/javadoc/1.4/
http://mockobjects.sourceforge.net/javadoc/1.4/com/mockobjects/servlet/package-summary.html

以下追加。
先月発売のJava Press vol.34 にMockObjectsを使ったテストについて書いた
記事がちょっとだけ載っているので、そちらも参考になると思います。

[ メッセージ編集済み 編集者: koe 編集日時 2004-03-02 12:02 ]
ダメ猫
常連さん
会議室デビュー日: 2004/02/20
投稿数: 45
投稿日時: 2004-03-02 13:42
koeさんありがとうございます。

現在やりたいことはそんな感じです。
最終的にはJSPのテストもやりたいのですがまずはサーブレットのテストをやります。
教えていただいたサイトを元にやってみようと思います
ありがとうございました。
ダメ猫
常連さん
会議室デビュー日: 2004/02/20
投稿数: 45
投稿日時: 2004-03-03 12:31
サーブレットからJSPを呼び出す部分を
--------------------------------------------------------------------------------
ServletContext sc = getServletContext();
sc.getRequestDispatcher("http://localhost:8080/TestCase/Error.jsp").forward(req,res);
--------------------------------------------------------------------------------

と定義してますがNullPointExceptionになってしまいます。
おそらくServletContextがテストケースで設定していないために、getServletContext()でエラーが出てると思い、MockServletContextを設定しようと次のようにしました。

--------------------------------------------------------------------------------
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mockobjects.dynamic.Mock;
import com.mockobjects.dynamic.OrderedMock;
import com.mockobjects.helpers.ServletTestHelper;
import com.mockobjects.servlet.MockServletContext;
import junit.framework.TestCase;


public class ContributionCheckTest extends TestCase {
Mock mockHttpServletRequest = new Mock(HttpServletRequest.class);
Mock mockHttpServletResponse = new OrderedMock(HttpServletResponse.class, "Response with non-default name");
ContributionCheck aServlet = new ContributionCheck();
final StringWriter output = new StringWriter();
final PrintWriter contentWriter = new PrintWriter(output);

final ServletTestHelper helper = new ServletTestHelper(); //ここでエラーが出る

final MockServletContext sc = helper.getServletContext();

public ContributionCheckTest(String arg0) {
super(arg0);
}

public static void main(String[] args) {
junit.swingui.TestRunner.run(ContributionCheckTest.class);
}
public void testSimpleAddition() throws ServletException, IOException {

mockHttpServletResponse.expect( "setContentType", "text/html");
mockHttpServletResponse.expectAndReturn( "getWriter", contentWriter );

aServlet.doGet((HttpServletRequest) mockHttpServletRequest.proxy(),
(HttpServletResponse) mockHttpServletResponse.proxy());

mockHttpServletRequest.verify();
mockHttpServletResponse.verify();
}
}
--------------------------------------------------------------------------------

new ServletTestHelper()にはHttpServletを引数にしないといけないようなのですが、
この部分がよくわかりません。
そもそも
final ServletTestHelper helper = new ServletTestHelper();
final MockServletContext sc = helper.getServletContext();
このようにServletContextを設定する考え方が間違っているのでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)