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

java ee maven

从前面的部分恢复

第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配置的“安全”属性。
  • 我们使用' create-drop '策略,这意味着每次运行测试时,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

java ee maven

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

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

相关文章

mysql数据库优化教程_mysql数据库索引优化学习教程

MySQL索引的建立对于MySQL的高效运行是很重要的&#xff0c;索引可以大大提高MySQL的检索速度。打个比方&#xff0c;如果合理的设计且使用索引的MySQL是一辆兰博基尼的话&#xff0c;那么没有设计和使用索引的MySQL就是一个人力三轮车。拿汉语字典的目录页(索引)打比方&#x…

windows系统git服务器启动,windowsServer服务器上搭建GIt服务器

十年河东&#xff0c;十年河西&#xff0c;莫欺少年穷学无止境&#xff0c;精益求精摸索了一天&#xff0c;终于把服务器端Git搭建完毕。记录下来&#xff0c;省的以后踩坑。如下&#xff1a;在官网搜索框中输入&#xff1a;download 搜索下载型选择为Java选择开发版然后下载下…

python程序设计题答案_《Python程序设计》习题与答案

第3章 选择结构与循环结构 3.1 分析逻辑运算符“or”的短路求值特性。 答&#xff1a; 假设有表达式“表达式1 or 表达式2”&#xff0c;如果表达式1的值等价于True&#xff0c;那么无论表达式2的值是什么&#xff0c;整个表达式的值总是等价于True。因此&#xff0c;不需要再计…

Linux普通玩家,熟悉这些高频命令就行了

回想当时入门Linux时抱着鸟叔的私房菜啃&#xff0c;看了没几页就放弃了 如果主要从事算法相关工作&#xff0c;其实高频使用的命令就那么些&#xff0c;一起看看吧 用户相关 id – 显示用户的详细信息&#xff08;uid、gid和group&#xff09;last – 列出有关最近登录的信…

如何在黄瓜中进行后端测试

黄瓜是一种规范语言的执行框架。 它并不是要成为测试语言&#xff0c;而是用于创建测试自动化。 黄瓜最适合出现一些现实世界中的参与者互动并取得某种成果的情况。 当可以从用户的角度编写它时&#xff0c;它特别有用。 Given Sarah is a premium club member When Sarah lo…

mysql权限层级体系_MySQL权限体系介绍

官方手册&#xff1a;https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.htmlMySQL是一个多用户的数据库&#xff0c;MySQL的用户可以分为两大类&#xff1a;(1)超级管理员用户(root)&#xff0c;拥有全部权限(2)普通用户&#xff0c;由root创建&#xff0c;普通用…

云服务器 生物信息学,云服务器 生物信息学

云服务器 生物信息学 内容精选换一换挂载有NVMe SSD盘的Linux弹性云服务器(如P1型云服务器)发生故障时&#xff0c;需联系管理员通过异地重建的方式进行恢复&#xff0c;新建故障弹性云服务器。如果故障弹性云服务器在/etc/fstab中设置了NVMe SSD盘的开机自动挂载功能&#xff…

python图像转字符画_python图像处理-字符画风格图片

前言 字符画图片&#xff0c;顾名思义就是由一个个字符组成的图片&#xff0c;下面这张图片很容易帮助你理解&#xff0c;如果我们可以将字符排列好&#xff0c;让他看上去像一个物体的形状&#xff0c;那么最后再将它输出保存为一张图片就可以实现了。下面的这些形状同样可以使…

在mybatis用mysql的代码块_mybatis plus与mysql分库组件mycat的结合

之前的文章简单介绍了一下mybatis plus&#xff1a;《使用Mybatis-plus代替原生Mybatis》。截止目前在项目中使用了一段时间的mybatis plus&#xff0c;再也没有写过sql&#xff0c;都用mp的Wrapper封装查询条件了。这里先简单介绍一下mp的用法(抱歉&#xff0c;上一篇里面讲得…

响应服务器535.5.7.0AUTH,javax.mail.AuthenticationFailedException:535 5.7.3无法发送邮件

我遇到了错误javax.mail.AuthenticationFailedException&#xff1a;535 5.7.3尝试发送电子邮件时的身份验证。我尝试使用两个不同的电子邮件帐户。一个使用Office365服务器详细信息&#xff0c;另一个使用Gmail服务器详细信息。在两种情况下&#xff0c;我都会遇到相同的错误。…

react生命周期函数_如何优雅的消灭掉react生命周期函数

开源不易&#xff0c;感谢你的支持&#xff0c;❤ star concent^_^序言在react应用里&#xff0c;存在一个顶层组件&#xff0c;该组件的生命周期很长&#xff0c;除了人为的调用unmountComponentAtNode接口来卸载掉它和用户关闭掉浏览器tab页窗口&#xff0c;该顶层组件是不会…

jolokia_Hawtio和Jolokia的Hibernate统计

jolokia企业Java的很大一部分处理数据。 在企业设置中使用数据的所有不同方式中&#xff0c;仍然存在使用任何种类的O / R映射的行之有效且广泛教授的方法。 JPA标准使每个人都比较容易使用它&#xff0c;并且它也应该是可移植的。 但是&#xff0c;我们不要谈论迁移细节。 O /…

python主循环方法mainloop_python gobject.mainloop吞噬信号事件

没有人感兴趣,所以让我尝试. 只是在同一页面上&#xff1a; import signal from gi.repository import GObject GObject.threads_init() mainloop GObject.MainLoop() signal.signal(signal.SIGINT, lambda n, f: mainloop.quit()) mainloop.run() 此代码有效&#xff1a; imp…

JVM垃圾收集和优化

总览 在对系统进行性能相关问题的故障排除时&#xff0c;内存优化是一个需要深入分析每个系统在内存中存储的内容&#xff0c;存储时间和访问模式的地方。 这篇文章是要在背景信息上进行注释&#xff0c;并在此工作中要注意一些要点&#xff0c;这些工作要专门针对基于Java的实…

redis desktop manager连不上redis_Redis安装教程

Ⅰ 简介Redis 是一个开源&#xff08;BSD许可&#xff09;的&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构&#xff0c;如字符串&#xff08;strings&#xff09;&#xff0c;散列&#xff08;hashes&#…

python打开方式错误_浅谈python 调用open()打开文件时路径出错的原因

昨晚搞鼓了一下python的open&#xff08;&#xff09;打开文件 代码如下 def main(): infile open("C:\Users\Spirit\Desktop\bc.txt",r) data infile.read() print(data) main() 然而结果总报错invaild argument 或者cant found such file *** 查找问题后 发现是由…

c++如何将int数组中的值取出*号运算符_如何用动态规划巧妙解决 “双十一” 购物时的凑单问题?羊毛薅起来!!!...

点击上方“程序员大白”&#xff0c;选择“星标”公众号重磅干货&#xff0c;第一时间送达今年过去的 “双十一” &#xff0c;你有薅到羊毛吗&#xff1f;每年的双十一&#xff0c;会有各种促销活动&#xff0c;比如 “满 300元减 80 元”。假如你女朋友的购物车中有 n 个(n &…

mysql sql 去除重复行_mysql – sql自连接表删除重复行

我有下表&#xff1a;╔════════╦════════════╗║ USERID ║ LANGUAGEID ║╠════════╬════════════╣║ 1 ║ 2 ║║ 1 ║ 7 ║║ 1 ║ 8 ║║ 2 ║ 10 ║║ 2 ║ 3 ║╚════════╩════════════╝现在我想为每…

python操作界面_Python使用PyQt5的Designer工具创建UI界面

一、Designer-UI编辑器 Designer是pyqt5-tools带的工具&#xff0c;默认可以在Python安装目录下找到的。我的之前项目导入过pyqt5-tools&#xff0c;所以我直接全盘搜索到了。打开designer后&#xff0c;我们可以编辑我们想要的UI界面&#xff0c;下面是我编辑的测试界面&#…

python统计词频_Python统计四六级考试的词频

Python统计四六级考试的词频此文首发于公众号 「Python知识圈」&#xff0c; 欢迎直接去公众号查看阅读文本大概需要 4.6 分钟。今天是教师节&#xff0c;先祝天下所有老师教师节快乐&#xff0c;感谢您在我学生时代对我的谆谆教诲。现在是开学之初&#xff0c;风华正茂的青年才…