0

Web アプリケーションで DAO を単体テストしようとすると問題が発生します。Sybase JConnect JDBC ドライバーを使用して dataSource Bean を作成するように、Spring 構成をすべてセットアップしました。私の問題は、アプリを webapp として実行したときにのみ Bean を作成できることです。

単体テストを実行しようとすると、次のメッセージが表示されます。

java.lang.ClassNotFoundException: com.sybase.jdbc3.jdbc.SybDriver

さらに説明するために、ここに私のディレクトリ構造があります:

src
   main
     -java
       - ...java files etc
    - resources
        -applicationContext.xml
        -other config files
    - webapp
        -WEB-INF
           -jconn3.jar   <---- putting it here works, but test doesn't have a WEB-INF folder!
   -test
     -java
     -resources

では、単体テストの実行時に jconn3.jar が認識されるようにするにはどうすればよいでしょうか。main/resources ディレクトリに配置しようとしましたが、webapp として実行しているかどうかに関係なく、これによりエラーが発生します。ビルド時に jconn3.jar が target/classes ディレクトリにコピーされることがわかりますが、実行時に jar が見つからないのはなぜですか? これを機能させる唯一の方法は、WEB-INF ディレクトリに保持することですが、それに依存する DAO を単体テストするにはどうすればよいでしょうか。

Spring MVC と Maven を使用しています。jar がリポジトリにないため、maven の依存関係を追加できないことに注意してください。また、リモート リポジトリに追加するオプションもありません。

要約すると、DAO 用の jar が必要なため、webapp の実行と単体テストの両方のために、ビルド パスに jar を配置する必要があります。リソースフォルダーに配置しても役に立たないように見える場合、どうすればこれを達成できますか。

4

2 に答える 2

0

Maven がなく、標準の Eclipse だけがある場合は、それがビルド パスにあり、ライブラリとしてマークされていることを確認する必要があります。

于 2013-03-13T01:27:12.340 に答える
0

テストの実行クラスパスに jconn3.jar を配置する必要があります。Maven を使用しているように見える場合は、ドライバーに対応する依存関係を pom に追加する必要があります。Sybase JDBC ドライバーは中央の Maven では使用できないため、次のようなコマンドを使用してローカル リポジトリにアップロードする必要があります。

サードパーティの JAR をインストールするためのガイド

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
    -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

これが完了したら、maven central の他の jar に対して行うのと同じ方法で、この jar に依存関係を追加できます。

<dependency>
    <groupId>group-id></groupId>
    <artifactId>artifact-id</artifactId>
    <version>version</version>
</dependency>

その時点から、Sybase ドライバー jar はテスト実行クラスパスに含まれます...

また、jar を WEB-INF ディレクトリに追加していますが、その必要はありません。Maven は、WAR 内に必要な jar ファイルを依存関係から推測できるので、その WEB-INF の場所から削除できます。心配しないでください。mvn パッケージを実行すると、ドライバーを含む jar が war ファイルに取り込まれます。

于 2013-03-13T00:49:08.287 に答える