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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

前言 字符画图片&#xff0c;顾名思义就是由一个个字符组成的图片&#xff0c;下面这张图片很容易帮助你理解&#xff0c;如果我们可以将字符排列好&#xff0c;让他看上去像一个物体的形状&#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 /…

JVM垃圾收集和优化

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

redis desktop manager连不上redis_Redis安装教程

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

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

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

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;风华正茂的青年才…

python爬虫数据可视化_适用于Python入门者的爬虫和数据可视化案例

本篇文章适用于Python小白的教程篇&#xff0c;如果有哪里不足欢迎指出来&#xff0c;希望对你帮助。 本篇文章用到的模块&#xff1a; requests,re,os,jieba,glob,json,lxml,pyecharts,heapq,collection 首先 本文我们的目的 抓取周杰伦的所有歌曲&#xff0c; 歌词&#xff0…

mysql中如何卸载插件_Eclipse中如何卸载插件

很久没用Eclipse了&#xff0c;今天打开的时候&#xff0c;突然报Android开发插件需要更新。打开插件管理页面&#xff0c;更新Android插件&#xff0c;又提示和旧版本有冲突&#xff0c;心想只能卸载了重新安装了。找了半天没找到在哪下载&#xff0c;把Eclipse目录下的plugin…

computed怎么使用_Vuex 基本使用

简单介绍iPhone X 是 iPhone, Vuex 并不是 Vue.我们查看官方文档可以知道&#xff1a;Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。怎么理解呢&#xff1f;就拿我两位数的资产的银行卡来说吧&#xff0c;基本的存钱取钱&#xff0c;就是状态管理。怎么用我们将以一个简…

windows安装python3步骤_Windows下python3和python2安装与一起使用

一、python2和python3安装 2、安装步骤&#xff0c;直接双击运行&#xff0c;记得勾选添加环境变量就可以。图片1.png 3、安装已经选择了添加这个环境变量&#xff0c;所以不用再去配置。 如果没有勾选&#xff0c;得自己去设置。 鼠标右键我的电脑 -> 属性 -> 点击高级系…

mysql ondelete_MySQL on delete cascade语句

在本教程中&#xff0c;您将学习如何使用MySQL ON DELETE CASCADE引用操作来执行外键从多个相关表中删除数据。在上一个教程中&#xff0c;我们学习了如何使用单个DELETE语句从一个或多个相关表中删除数据。但是&#xff0c;MySQL提供了一种更为有效的方法&#xff0c;称为ON D…

python构建二叉树_BinaryTree:学习二叉树的Python库

Python部落(python.freelycode.com)组织翻译&#xff0c;禁止转载&#xff0c;欢迎转发。简介&#xff1a; 您是否在为考试、作业或技术面试学习二叉树&#xff1f; Binarytree是一个Python库&#xff0c;它通过一个简单的API生成二叉树&#xff0c;可以进行检查和操作。它让您…

mysql union as 注入_sql注入入门 之 mysql 常规注入 [ union方式 ]

1,常规数字型 mysql 实例注入点,如下:1https://www.vuln.com/md_materia_profile_view.php?viewid22,依旧先尝试下经典的单引号,如下,虽然没暴露出明显的数据库报错信息,但我们发现,此时返回的页面已经异常了,经验判断,十有八九是个注入点,先不管那么多,我们继续1https://www.…

gradle docker_带有Gradle的Docker容器分为4个步骤

gradle docker您是否需要通过Java Web应用程序创建Docker映像&#xff1f; 您在使用Gradle吗&#xff1f; 如果是这样&#xff0c;那么您距Docker nivana仅4步之遥。 对于此示例&#xff0c;我将使用一个简单的Spring Boot应用程序。 您可以在我的名为galoshe的Github存储库中…

python socket编程_Python学习记录-socket编程

1. OSI七层模型详解2. Python socket 什么是 Socket? Socket又称”套接字”&#xff0c;应用程序通常通过”套接字”向网络发出请求或者应答网络请求&#xff0c;使主机间或者一台计算机上的进程间可以通讯。 Python 提供了两个级别访问的网络服务&#xff1a; 低级别的网络服…