针对新手的Java EE7和Maven项目–第6部分

从前面的部分恢复

第1 部分 , 第2 部分 , 第3 部分 , 第4 部分 , 第5部分

在上一篇文章(第5部分)中,我们发现了如何使用Arquillian(我们的EJB服务)进行单元测试,并将其部署在Wildfly8.1应用服务器的“真实”实例中。 扩展前面的示例,我们将添加更多配置和代码,以便我们可以添加涉及JPA2实体的单元测试。 从数据库创建,保存和检索信息是任何JavaEE应用程序的一项非常基本的任务。 我们需要确保我们的域模型和在其之上编码的逻辑经过了尽可能多的测试。 我将使用“ 最简单的 ”配置形式和相关库。 由于我们已经针对Wildfly 8.1进行了测试,因此我们将使用与服务器捆绑在一起的内部H2内存数据库以及相关的ExampleDS数据源

请注意 ,这仅是用于测试和演示,在现实生活中,您将需要在基于大量生产的RDBMS下进行测试,您应该做到以下几点:

  • 在您的数据库服务器(例如Oracle,MySQL,DB2…)中创建测试数据库模式
  • 将适当的数据源配置添加到应用程序服务器,以便它连接到上述数据库服务器。

我们已经设置了Arquillian,并且已经在利用独立的Wildfly 8.1应用服务器的功能。 在上一篇文章(第5部分)中,我们只是一个简单的Stateless EJB,它没有在数据库上检索或保存信息。 在样本域模块上,我们已经定义了一个简单的JPA2实体Bean。 我们想测试一些基本的东西,例如将实体保存在数据库中,检索实体等。即使对于如今,对于许多项目来说,创建无状态会话bean也是一种普遍的模式,实际上为每个实体实现此代码。 您可能听说过它们是“ DAO”类。 在我们的案例中,没有DAO实施,但是将应用相同的原则。

定义一个test-persistence.xml

由于我们已经在sample-domain模块(jar)下定义了一个标准的persistence.xml (实际上是在配置我们的实体管理器),因此我们需要进行类似的配置。 最终,一个非常相似的持久化xml,但这一次将被放置在/ src / test / resources文件夹中,因为它将为我们(在测试过程中从Arquillian / Wildfly测试组合。

CapturFiles_3

它是这样的:

<?xml version="1.0" encoding="UTF-8"?><persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistencehttp://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"><persistence-unit name="test"><jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source><properties><property name="hibernate.hbm2ddl.auto" value="create-drop"/><property name="hibernate.show_sql" value="true"/><property name="hibernate.format_sql" value="true"/><property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/></properties></persistence-unit></persistence>

以上文件的一些注意事项:

  • 我们正在定义在Wildly 8.1上预先配置的ExampleDatasource
  • WildFly 8.1与Hibernate 4.x捆绑在一起,因此我们正在使用Hibernate配置的“安全”属性。
  • 我们正在使用“ 创建-删除 ”策略,这意味着每次运行测试时,hibernate都会将表拖放到基础数据库中并重新创建它们。 这将在我们正在尝试并且不断更改领域模型的情况下为我们提供帮助。
  • 的胚胎。 Wildly提供的数据库是H2 ,因此我们正在配置Hibernate以使用此“ 方言 ”。

创建Arquillian测试

这是我们测试的样子(您可以在文章末尾的git链接上查看源代码):

测试5

以上代码的一些注意事项:

点0 :这是每个基于Arquillian的测试中最重要的部分之一。 这是我们在内存中创建“战争”的地方,我们的可部署内容将包含被测类和支持框架所需的任何其他资源。 所有的连接都是使用一个名为ShrinkWrap的基于Arquillian的框架完成的 。 在我们的示例中,“ createDeployment ”方法将打包我们的单个JPA实体“ User”和一个persistence.xml文件,该文件实际上是我们测试资源下的test-persistence.xml,并配置了使用默认设置的实体管理器疯狂的数据源。

要点1:这是一个特殊的批注,在更复杂的测试中非常方便,通过使用此批注,我们实际上是在默认情况下将JTA(事务性)支持注入到我们的测试方法中,在这种特殊测试中,使用量不大。 记下“回滚”设置。 它表明无论该测试方法在事务中最后执行什么操作,所有插入/删除/更新都将被回滚,因此我们不会留下任何垃圾。

第2点:我们需要使用适当的RunWith注释对测试进行注释,这表明我们希望启用Junit / Arquillian机制。

第3点:我们正在注入一个实体管理器,就像在常规EJB / resource中那样。 持久性管理器的名称必须与test-persistence.xml中定义的名称保持一致,因此请当心。

要点4: @Before注释表示init()方法将在每次测试之前运行。 这是初始化任何数据并准备我们的测试域环境的好地方。

第5点:您可以在init()方法中看到,我们正在保留一个User实体,这与我们在产品/实际代码中所做的类似!

第6点:我们正在尝试查询对象的实际测试方法,此后继续存在。

最后

实际上,我们已经配置并准备了项目结构和配置以便使用Arquillian,这一事实实际上是最重要的。 一旦准备好了基本块,那么就需要编写更多的测试并试验代码。 右键单击测试,如您所见,我们获得了成功的绿灯,这​​是一个明确的通过。 测试愉快!

CapturFiles_5

  • 您可以在我的bitbucket存储库中的post6标记下找到此帖子的完整代码。

翻译自: https://www.javacodegeeks.com/2014/06/java-ee7-and-maven-project-for-newbies-part-6.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1. 整除及其性质

整除的定义&#xff1a; 若整数 a 除以非零整数 b &#xff0c;商为整数且余数为零&#xff0c;即 a 能被 b 整除&#xff0c;记做 b | a&#xff0c;读作&#xff1a;b 整除 a 或 a 能被 b 整除。a 叫做 b 的倍数&#xff0c; b 叫做 a 的因数。 整除基本性质&#xff1a; 1. …

echarts 地图 免费离线js,json包分享

最近&#xff0c;项目中需要用到地图&#xff0c;由于项目的特殊性&#xff0c;只能使用内网获取数据。 然而&#xff0c;echarts官网上的离线地图包&#xff08;http://echarts.baidu.com/download-map.html&#xff09;早在一年前就不支持下载了&#xff0c;推荐使用地图API…

WPF 中的设备无关单位

WPF窗体以及内部的所有元素都是采用设备无关的单位来衡量的。一个设备无关单位定义为1英寸的96分之一&#xff0c;即1/96 inch。 假定我们创建了一个WPF按钮&#xff0c;其大小为96x96个单位&#xff0c;如果使用标准Windows的DPI设置&#xff08;96dpi&#xff09;&#xff0…

收藏网站制作常用经典css.div.布局.设计实例打包下载(下方有其他链接)

http://www.aa25.cn/234.shtml 转载于:https://www.cnblogs.com/asia/archive/2009/05/20/1467772.html

Java 8 Friday:大多数内部DSL已过时

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五&#xff0c;我们都会向您展示一些不错的教程风格的Java 8新功能&#…

Starter pom

以下图片是引用书籍内容&#xff1a; 比如你在用boot写一个web项目&#xff0c;在maven中你会导入&#xff1a; <!-- 导入spring boot的web支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-we…

上传图片截图预览控件不显示cropper.js 跨域问题

上传图片到图片服务器&#xff0c;因为域名不同&#xff0c;多以会有跨域问题。 No Access-Control-Allow-Origin header is present on the requested resource. Origin http://img.xxx.com is therefore not allowed access. 照看代码发现&#xff0c;cropper.js里面对图片的…

在Spring JDBC中添加C3PO连接池

连接池是一种操作&#xff0c;其中系统会预先初始化将来要使用的连接。 这样做是因为在使用时创建连接是一项昂贵的操作。 在本文中&#xff0c;我们将学习如何在Spring JDBC中创建C3P0连接池&#xff08;某人未使用休眠&#xff09;。 Pom.xml <dependency><groupI…

在 CentOS/Fedora 下安装 JAVA 环境

介绍 本文介绍如何在 CentOS 7&#xff08;6/6.5&#xff09;、 Fedora、RHEL 上安装 Java。Java是一个流行的软件平台&#xff0c;允许您运行Java应用程序。 本文涵盖了以下Java版本的安装&#xff1a; OpenJDK 8Oracle Java 8先决条件 在开始之前&#xff0c;您应该有一个能够…

小程序: 在同一个文件夹中配置多个页面

1. 可以在同一个文件夹中配置多个页面&#xff08;即相关的放在一个文件夹中&#xff09; 如&#xff1a; 创建一个首页&#xff1a; 在 app.json中配置 -- pages/index/index创建一个首页中的相关页面&#xff1a; 在 app.json中配置 -- pages/index/detail/detail 博客地址…

[欧拉函数] Bzoj P2186 沙拉公主的困惑

Description 大富翁国因为通货膨胀&#xff0c;以及假钞泛滥&#xff0c;政府决定推出一项新的政策&#xff1a;现有钞票编号范围为1到N的阶乘&#xff0c;但是&#xff0c;政府只发行编号与M!互质的钞票。房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的数量。现…

象素图和向量图

象素图和向量图主要的区别是动态和静态的区别 象素图是固定的图&#xff0c;它在图形生成时就已经是由固定的象素点组成了&#xff0c;不可以再变化&#xff0c;所以大小不一样&#xff0c;清晰度不一样&#xff0c; 向量图是动态的图&#xff0c;每次显示都会根据大小绘制本身…

ActiveMQ –经纪人网络解释–第5部分

在前面的第4部分中&#xff0c;我们已经看到了如何使用网络连接器在队列中平衡远程使用者的负载。 在第5部分中&#xff0c;我们将看到如果在某个主题上有并发远程持久订阅者&#xff0c;则相同的配置将如何工作。 考虑以下配置…。 图1&#xff1a;经纪人网络–主题上的负载…

Unity项目导入的error

5.6.3error 如下&#xff1a;An assembly with the same name UnityEngine.UI has already been imported. Consider removing one of the references or sign the assemblyanswer:I deleted all the c# project files at the root of the folder structure and reloaded the p…

小程序: 域名配置

1. 问题 在小程序中&#xff0c;如果我们没有在微信公众平台: 配置 https开头的、备案过的域名话&#xff0c;调用该域名下的接口&#xff0c;就会报错 当然&#xff1a; 如果只是简单的学习下小程序使用的话&#xff0c;可以不校验域名 — 微信开发者工具中&#xff1a; 详情 …

描述符

描述符描述符也是面向进阶的一种&#xff0c;由于它的涉及比较广&#xff0c;所以单独讲。 一、描述符 描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协议。 描述符的作用是用来代理另外一个类的属性&#xf…

C++迭代器简介

迭代器是一种检查容器内元素并遍历元素的数据类型。 标准库为每一种标准容器&#xff08;包括 vector&#xff09;定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法&#xff1a;所有的标准库容器都定义了相应的迭代器类型&#xff0c;而只有少数的容器支持下标…

编写干净的测试-被认为有害的新内容

很难为干净的代码找到一个好的定义&#xff0c;因为我们每个人都有自己的单词clean的定义。 但是&#xff0c;有一个似乎是通用的定义&#xff1a; 干净的代码易于阅读。 这可能会让您感到有些惊讶&#xff0c;但是我认为该定义也适用于测试代码。 使测试尽可能具有可读性是我…

所谓经济现象

随想一下&#xff0c;先举出一些基本认知&#xff0c;后面大家会看到这些认知之间的牵扯&#xff0c;已经人在做决策的时候是如何分配权重的&#xff0c;进而产生后续和当今的局面。经济学一点都不难&#xff0c;只是现在人学的是技术上的操作&#xff0c;而不学背后的运作逻辑…

hdu-1277--字典树坑题

hdu-1227 字典树&#xff0c;坑题&#xff01;&#xff01;当字典树练手 Problem Description 我们大家经常用google检索信息&#xff0c;但是检索信息的程序是很困难编写的&#xff1b;现在请你编写一个简单的全文检索程序。 问题的描述是这样的&#xff1a;给定一个信息流文件…