从前面的部分恢复

第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测试组合。

它是这样的:

<?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链接上查看源代码):

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

点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,这一事实实际上是最重要的。 一旦准备好了基本块,那么就需要编写更多的测试并试验代码。 右键单击测试,如您所见,我们获得了成功的绿灯,这​​是一个明确的通过。 测试愉快!

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

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

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

  1. java ee maven_针对新手的Java EE7和Maven项目–第1部分–简单的Maven项目结构–父pom...

    java ee maven 为什么呢 很多时候,我在日常工作中试图解决一些基本或复杂的Maven / Java EE项目结构问题. 为了提供解决方案,我经常最终会尝试项目结构,测试我在不同应用程序服务 ...

  2. 针对新手的Java EE7和Maven项目–第1部分–简单的Maven项目结构–父pom

    为什么呢 很多时候,我在日常工作中试图解决一些基本或复杂的Maven / Java EE项目结构问题. 为了提供解决方案,我经常最终会尝试项目结构,测试我在不同应用程序服务器上的部署并细化我的配置. ...

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

    java ee maven 第一部分 , 第2部分 , 第3部分 , 第4部分 , 第5部分 , 第6部分 , 第7部分 第8部分 自上一篇文章以来,这一系列教程已经有很长时间了. 是时候恢复并在我们 ...

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

    java ee maven 从前面的部分恢复 第1 部分 , 第2 部分 , 第3 部分 , 第4 部分 , 第5部分 在上一篇文章(第5部分)中,我们发现了如何使用Arquillian(我们的EJB ...

  5. 针对新手的Java EE7和Maven项目–第8部分

    第1部分 , 第2部分 , 第3部分 , 第4部分 , 第5部分 , 第6部分 , 第7部分 第8部分 自上一篇文章以来,这一系列教程已经有很长时间了. 是时候恢复并在我们的简单项目中添加新功能了. ...

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

    java ee maven 从前面的部分恢复 第1 部分 , 第2 部分 , 第3 部分 , 第4 部分 , 第5 部分 , 第6部分 在上一篇文章(第6章)中,我们发现了如何使用Arquillian ...

  7. 针对新手的Java EE7和Maven项目-第2部分-为我们的应用程序定义一场简单的战争

    从第一部分恢复 第1部分 我们刚刚定义了父 pom. 一种特殊的pom类型,它最终定义了我们的应用程序将要使用的库. 它还配置了所有用于包装我们应用程序每个模块的Maven工具. 您可以在此处 签出 ...

  8. ejb的maven_针对新手的Java EE7和Maven项目-第3部分-定义ejb服务和jpa实体模块

    ejb的maven 从前面的部分恢复 第1部分 第2部分 我们在第三部分继续介绍,我们已经有一个父pom,并且已经为我们的war模块定义了pom. 在我们的原始设置中,我们定义了我们的应用程序将包含一 ...

  9. java ee maven_针对新手的Java EE7和Maven项目–第5部分–使用Arquillian / Wildfly 8进行单元测试...

    java ee maven 从前面的部分恢复 第1 部分 , 第2 部分 , 第3 部分 , 第4部分 , 这是第一篇"额外"文章,基于我在该系列博客文章中"构建&quo ...

  10. 针对新手的Java EE7和Maven项目–第7部分

    从前面的部分恢复 第1 部分 , 第2 部分 , 第3 部分 , 第4 部分 , 第5 部分 , 第6部分 在上一篇文章(第6章)中,我们发现了如何使用Arquillian和Wildfly 8.1进行 ...

最新文章

  1. 如果你在2018面试前端,那这篇文章最好看一看!
  2. nginx反向代理取得IP地址
  3. python怎么显示结果_python中plot实现即时数据动态显示方法
  4. 存储系统管理服务器,Mainframe的存储管理系统和架构
  5. 在VS2010下运行Qt程序
  6. javaweb学习总结(二十八)——JSTL标签库之核心标签
  7. linux 加jre环境变量
  8. 《金色梦乡》金句摘抄(六)
  9. 微信 android兼容性问题怎么解决方案,微信小程序兼容性问题
  10. H.264 RTPpayload 格式------ H.264 视频 RTP 负载格式
  11. 如何打开java jar文件怎么打开方式_Win10系统下jar文件如何打开?
  12. 八爪鱼采集器32位_飞智八爪鱼2游戏手柄评测
  13. 106短信平台如何申请?申请周期是多久?
  14. 基因数据处理72之GATK安装成功
  15. 321,京东言犀×NLPCC 2022挑战赛开赛
  16. (附源码 )SSM+mysql+微信小程序网易云音乐设计与实现 毕业设计261620
  17. 蛋白质相互作用位点标签的获取方法
  18. 使用Python将多个单独的Excel文件整合到一个Excel文件的不同工作表里
  19. ubuntu18.04使用蓝牙适配器
  20. 面试官:如何用a标签实现文件下载?(一文带你手撕知识点)

热门文章

  1. 用枚举enum实现单例
  2. Makefile浅尝
  3. 打破双亲委派么,怎么打破_打破了vs你错了
  4. java监控数据库性能_Java:GraalVM数据库流性能
  5. java 集成开发工具_最好的Java开发人员测试和集成工具
  6. rxjava 循环发送事件_使用RxJava和SseEmitter进行服务器发送的事件
  7. gtest 测试部分_全部关于测试–第1部分
  8. jaxb_JAXB –新手的观点,第1部分
  9. Jakarta EE贡献–入门
  10. java 内存同步_Java中的硬件事务性内存,或者为什么同步将再次变得很棒