0

我在尝试在 webapp 中对我的 DAO 进行单元测试时遇到问题。我的 spring 配置全部设置为使用 Sybase JConnect JDBC 驱动程序创建一个 dataSource bean。我的问题是,当我将应用程序作为 web 应用程序运行时,我只能创建我的 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 在运行时为我的单元测试被识别呢?我已经尝试将它放在主/资源目录中,但这会导致失败,无论我是否将它作为 webapp 运行。我可以看到 jconn3.jar 在构建时被复制到 target/classes 目录,那么为什么在运行时找不到 jar?似乎让它工作的唯一方法是将它保存在 WEB-INF 目录中,但是我如何对依赖它的 DAO 进行单元测试。

我正在使用 Spring MVC 和 Maven。注意我无法添加 maven 依赖项,因为 jar 不在存储库中,我也没有将其添加到远程存储库的选项。

总而言之,我需要在我的构建路径上放置 jar 来运行 webapp 和进行单元测试,因为两者都需要用于 DAO 的 jar。将它放在资源文件夹中时如何实现这一点似乎没有帮助。

4

2 回答 2

0

您必须将 jconn3.jar 放在测试的执行类路径中。如果您正在使用 maven,您必须在 pom.xml 中添加与您的驱动程序相对应的依赖项。由于 Sybase JDBC 驱动程序在中央 Maven 中不可用,因此您必须使用如下命令将其上传到本地存储库:

安装 3rd 方 JAR 的指南

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

完成此操作后,您可以向此 jar 添加依赖项,就像在 maven Central 中为任何其他 jar 所做的一样

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

从那时起,您的 Sybase 驱动程序 jar 将包含在测试执行类路径中......

您还将 jar 添加到 WEB-INF 目录,您不需要这样做。Maven 足够聪明,可以从您的依赖关系中推断出需要进入您的战争的 jar 文件,因此您可以将其从该 WEB-INF 位置中删除。不用担心,当您执行 mvn package 时,带有驱动程序的 jar 将在您的 war 文件中结束

于 2013-03-13T00:49:08.287 回答
0

如果没有 Maven 和标准 eclipse,您需要确保它在构建路径中并标记为库,然后 eclipse 现在将做什么

于 2013-03-13T01:27:12.340 回答