2009-04-30 15 views
8

との統合テストのweb.xmlをOK、これは一種のに関連している:Using jetty to install and run servlet tests programmaticallyロードアップ桟橋

が偉大な答えを得て、プログラム的にサーブレットをロードすることができましたし、そのすべての素晴らしいで作られました。

しかし私がしたいのは、テスト(クラスパス内のすべて)にweb.xmlをロードして(現在のクラスパスを使用して)サーバーを起動させることです。それを行うディレクトリに移動しますが、私はクラスパスから離れて作業したいと考えています。私のweb.xmlを本質的に検証します。

(関連性はありませんが、このアプリはscalaですが、問題はありませんでした。すべてが広告として機能します)。

+0

私はあなたの問題を見ることはできません - "classpathのすべて"とはどういう意味ですか?特定のweb.xmlを使用してJettyを開始したいと思います。これは問題ありません。スクリプトを使ってweb.xmlをコピーし、Jettyを起動してください。 – Mork0075

+0

実際にはテストと一緒に実行したい - 別のプロセスとして起動しないでください(これはうまくいきますが、プロセス単位テストと同じように整然としたものではありません) - その単なる便利なことです。 –

答えて

13

個々のサーブレットをロードするのではなく、プログラム的に適切なWebアプリケーションをロードすることが望ましいと思います(そして、完全なWARファイルを使用せずに実行したいと思います)。

Server server = new Server(port); 
WebAppContext root = new WebAppContext(); 

root.setWar("/path/to/somewhere"); 
root.setContextPath("/"); 

server.addHandler(root); 
server.start(); 

トリックは/path/to/somewhereWEB-INFディレクトリが含まれている必要がありますし、あなたのweb.xmlファイルが内側に生きなければならないことです。そのディレクトリ構造内に他のものを置く必要はありません。クラスパスから他のものを自動的にロードすることができます(実際のWARファイルへのパスや、展開されたWARツリーを完成させることもできます)。

+0

はい - それは私がやったことです。それはうまくいく。 –

+0

(そしてその速い!本当にユニットテストのための "ユニット"テストのために素晴らしい!) - この投稿BTWを更新してくれてありがとう。 –

関連する問題