从前面的部分恢复
第1 部分 , 第2 部分 , 第3 部分 , 第4 部分 , 第5 部分 , 第6部分
在上一篇文章(第6章)中,我们发现了如何使用Arquillian和Wildfly 8.1进行单元测试JPA2域模型。在上一篇文章中,我们做出了一个简单的配置决定,我们使用了与Wildfly 8.1捆绑在一起的内部H2数据库配置的数据源(称为ExampleDS)。 但是真正的DBMS呢? 在这篇文章中,我们将扩展以前的工作,使用相同的原理,并
- 在我们的本地主机上对正在运行的PostgreSQL进行测试
- 使用Arquillian Offer的ShrinkWrap APi的一些非常好的功能。
先决条件
您需要在本地安装PostgreSQL RBDMS ,我的示例基于在localhost上运行的服务器,数据库名称为papodb 。
添加更多依赖
最终,我们需要在样本父代(pom)中添加更多依赖项。 其中一些与Arquillian有关,特别是ShrinkWrap Resolvers功能(稍后会详细介绍)。
因此,我们需要将其添加到父pom中。 xml如下:
<shrinkwrap.bom-version>2.1.1</shrinkwrap.bom-version>
<!-- jbdc drivers -->
<postgreslq.version>9.1-901-1.jdbc4</postgreslq.version>
...
<!-- shrinkwrap BOM-->
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-bom</artifactId>
<version>${shrinkwrap.bom-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- shrinkwrap dependency chain-->
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-depchain</artifactId>
<version>${shrinkwrap.bom-version}</version>
<type>pom</type>
</dependency>
<!-- arquillian itself-->
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>${arquillian-version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<!-- the JDBC driver for postgresql -->
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgreslq.version}</version>
</dependency>
有关上述更改的一些注意事项:
- 为了避免依赖项之间的任何潜在冲突,请确保在Arquillian BOM之上定义ShrinkWrap BOM
现在,在sample-services(pom.xml)上 ,托管的项目是简单测试,我们需要引用其中一些依赖项。
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-depchain</artifactId>
<scope>test</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
重组我们的测试代码
在前面的示例中,我们的测试很简单,我们仅使用了特定的测试配置。 由于我们将测试应用程序打包为jar,因此只生成了一个test-persistence.xml文件,而没有web.xml文件。 现在,我们将测试存档升级为战争。 当涉及捆绑和部署企业应用程序时,JavaEE7中的战争包装已成为第一手公民。 与前面的示例的主要区别在于,我们希望保留以前的设置,这意味着使用Wildfly上的内部H2进行测试,以及对真实的RDBMS服务器进行新的设置测试。 因此,我们需要维护2套配置文件,并利用Maven配置文件功能,根据我们的模式对它们进行相应打包。 如果您不熟悉Maven,请确保查看配置文件的概念。
为每个配置文件添加单独的配置
因此,我们的测试资源(请注意这些资源位于src / test / resources下)如下所示。
两种情况都有差异。 h2的test-persistence.xml指向ExampleDS数据源,其中postgre上的那个指向我们在web.xml中定义的新数据源! 请从下面的git链接中查看实际代码。
这就是我们在web.xml中定义数据源的方式
以上注意事项
- JNDI名称中的标准命名java:jboss / datasources / datasourceName
- 一旦读取了web.xml文件的内容,应用程序服务器将自动部署并配置新的数据源。
这是我们的persistence.xml
- 确保2个JNDI条目在数据源定义和persistence.xml中都相同
- 当然,用于postGresql的Hibernate方言是不同的
- 高亮显示的行是Wildfly 8.1所需要的特殊设置,如果您要一口气部署它,则需要设置数据源,jdbc驱动程序和代码。 它提示应用程序服务器首先初始化和配置数据源,然后初始化EntityManager。 如果您已经部署/配置了数据源,则不需要此设置。
在pom中定义配置文件
在sample-services pom.xml中,添加以下部分。 这是我们的配置文件定义。
<profiles>
<profile>
<id>h2</id>
<build>
<testResources
<testResource>
<directory>/resources-h2</directory>
<includes>
<include>**/*</include>
</includes>
</testResource>
</testResources>
</build>
</profile>
<profile>
<id>postgre</id>
<build>
<testResources>
<testResource>
<directory>/resources-postgre</directory>
<includes>
<include>**/*</include>
</includes>
</testResource>
</testResources>
</build>
</profile>
</profiles>
根据激活的配置文件,我们指示Maven在特定的子文件夹下包括并使用xml文件。 因此,如果我们应用以下命令:
mvn clean test -Pdb2
然后,maven将在resource-h2文件夹下包含persistence.xml和web.xml,我们的测试将使用内部的H2 DB。 如果我们发出:
mvn clean test -Ppostgre
然后,我们的测试Web存档将与本地Postgresql服务器专用的数据源定义一起打包。
编写一个简单的测试
最终,我们新的JUnit测试与之前的测试没有太大不同。 这是一些关键点的屏幕截图。
上面代码的一些注意事项:
- Junit测试和基本注释与上一篇文章相同。
- init()方法再次相同,我们只是创建并保留一个新的SimpleUser实体
- 第一个主要区别是ShrinkWrap Api的使用,它利用了pom中的测试依赖项,并且我们可以将JBDC驱动程序定位为jar。 找到ShrinkWrap之后,请确保将其与其他资源和代码一起打包在我们的test.war中。
- 尽管仅打包jdbc驱动程序是不够的,为了使其正常工作,我们需要在服务器中存在(配置)数据源。 我们希望这是自动的,这意味着我们不想在测试Wildfly服务器上进行任何预配置。 我们利用该功能在web.xml上定义数据源。 (在代码中将其打开)。
- 一旦扫描了web.xml,应用程序服务器就会选择该条目,并将在java:jboss / datasources / testpostgre名称下配置一个数据源。
- 因此,我们将驱动程序,数据源定义捆绑在一起,我们有一个persistence.xml指向正确的datasourc。 我们准备测试
- 我们的测试方法与之前的测试方法相似。
我们为H2档案修改了一些资源,以便每次都打包相同的战争结构。 这意味着,如果我们使用-Ph2配置文件运行测试,则包含的web.xml为空,因为实际上我们不需要在此处定义数据源,因为该数据源已经由Wildfly进行了部署。 但是persistence.xml是不同的,因为在一种情况下,所定义的方言特定于H2,而在另一种情况下,所定义的方言特定于Postgre。
您可以遵循相同的原理并添加新的资源子文件夹,为另一个RDBMS(例如MySQL)配置数据源,添加适当的代码以获取驱动程序并将其打包。
- 您可以在此bitbucket repo-tag上获得此帖子的代码 。
资源资源
- Shrinkwrap解析器API页面 (此强大API的许多漂亮示例)
- 定义Wildfly 8.1的数据源
翻译自: https://www.javacodegeeks.com/2014/07/java-ee7-and-maven-project-for-newbies-part-7.html