在 TDD 中,为什么选择 OpenEJB,为什么选择 Arquillian?

2023-11-22

我是一名 Web 开发人员,最终参与了一些 Java EE 开发(Richfaces、Seam 2、EJB 3.1、JPA)。为了测试 JPA,我使用 hypersonic 和 Mockito。但我缺乏更深入的 EJB 知识。

有些人可能会说我们应该使用 OpenEJB 和 Arquillian,但是为什么呢? 我什么时候需要进行容器相关测试?我需要 OpenEJB 和 Arquillian 的可能测试场景有哪些?

请赐教:)


这个案例有两个方面。

  1. Unit tests. These are intended to be very fast (execute the whole test suite in seconds). They test very small chunks of your code - i.e. one method. To achieve this kind of granularity, you need to mock the whole environment using i.e. Mockito. You're not interested in:
    • 调用 EntityManager 并将实体放入数据库中,
    • 测试交易,
    • 进行异步调用,
    • 命中 JMS 端点等。

您模拟整个环境并单独测试每个方法。单元测试是细粒度的而且速度快得惊人。这是因为每次对代码进行一些重要更改时都可以执行它们。如果它们更加复杂和耗时,开发人员就不会像他应该的那样频繁地点击“测试”按钮。

  1. Integration tests. These are slower, as you want to test the integration between your modules. You want to test if they 'talk' to each other appropriately, i.e.:
    • 交易是否按照您期望的方式传播,
    • 如果您在完全没有事务的情况下调用业务方法,会发生什么情况,
    • 从您的 Web 服务客户端发送的更改是否真的到达您的端点方法并将数据添加到数据库中?
    • 如果我的 JMS 端点抛出 ApplicationException 怎么办 - 它会正确回滚所有更改吗?

如你所见,集成测试是粗粒度的当它们在容器中(或者基本上:在类似生产的环境中)执行时,它们的速度要慢得多。开发人员通常不会在每次代码更改后执行这些测试。

当然,您可以以嵌入模式运行EJB容器,就像您可以在Java SE中执行JPA一样。关键是,人工环境为您提供了基本服务,但您最终会对其进行调整,但灵活性仍然低于真实容器。

Arquillian 使您能够在您选择的容器上创建生产环境,并在该环境中执行测试(使用数据源、JMS 目标以及您期望在生产环境中看到的许多其他配置。)

希望能帮助到你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 TDD 中,为什么选择 OpenEJB,为什么选择 Arquillian? 的相关文章

随机推荐

  • 如何配置 IIS,以便在连接到 SQL Server 时使用用户的域凭据?

    我们最近发布了最新版本的 Intranet 应用程序 该应用程序现在使用 Windows 身份验证作为标准 并且需要能够使用最终用户的域凭据连接到已配置的 SQL 服务器 最近我们发现 在一些客户部署中 尽管 IIS 可以看到用户的域凭据
  • 是否可以在 .NET 4 中动态创建路由?

    在我们的应用程序中 我们使用新的 NET 4 路由系统将某些请求路由到站点的其他部分 我们只允许在深夜发布我们的网站代码 这意味着我们必须加班到很晚才能发布任何代码更改 我们经常需要创建自定义路由来支持旧内容的旧链接并将其路由到新内容 这些
  • Adobe Media Encoder 是否可以使用 ExtendScript 编写脚本?

    Adobe Media Encoder AME 是否可以编写脚本 我听人们提到它是 官方可编写脚本的 但我找不到任何对其可编写脚本的对象集的引用 有人有编写 AME 脚本的经验吗 Adobe 媒体编码器 正式 不可编写脚本 但我们可以使用扩
  • Windows 窗体:如何更改禁用标签的字体颜色

    我正在尝试为标签控件设置禁用的字体特征 我可以设置所有字体特征 大小 粗体等 但颜色被默认的窗口行为覆盖 这似乎是这两种颜色之一 如果背景颜色是透明的 则前景色与文本框禁用颜色相同 如果背景颜色设置为其他颜色 则前景色为深灰色 下图演示了该
  • SQLAlchemy:将查询结果插入到另一个表中

    所以我得到了一些结果install表 像这样 install metadata tables install results session query install
  • Activiti / Camunda 用变量改变边界计时器

    我有一个关于 Activiti Camunda 中用户任务的计时器边界事件的特殊问题 启动流程时 我使用流程变量设置计时器持续时间 并使用边界定义中的表达式来解析该变量 边界事件是在用户任务上定义的
  • Javascript - .innerHTML 更改自动关闭标签

    我正在尝试使用 Javascript 动态地将元素放入其他元素中 而无需刷新页面 它的 AJAX 部分可以工作并且功能正常 然而 由于某种未知的原因 我的代码自动关闭 这是代码片段 您可以看到它实际上并未关闭 但是在浏览器中运行代码后它被关
  • 使用 iOS 的 ExtAudioFileWrite 将音频样本缓冲区写入 aac 文件

    更新 我已经弄清楚了这一点并发布了我的解决方案作为我自己的问题的答案 如下 我正在尝试使用 AAC 格式的 ExtAudioFileWrite 将简单的音频样本缓冲区写入文件 我已经通过下面的代码实现了这一点 将单声道缓冲区写入 wav 文
  • 如何向 HTTP 客户端传递客户端证书?

    我想在服务 A 和 B 之间使用相互 SSL 身份验证 我目前正在使用 Java 实现从服务 A 传递客户端证书 我正在使用 Apache DefaultHttpClient 来执行我的请求 我能够从内部凭证管理器检索服务 A 的客户端证书
  • 我可以使用 CGAffineTransform Rotation 将视图旋转超过 360 度吗?

    我正在编写一个 iPhone 应用程序 并且我有一张图像 我想将其向外旋转 目前我的代码如下所示 包装在 beginAnimations commitAnimations 块中 scale CGAffineTransformScale CG
  • 经典 ASP - ADO 执行传递参数的存储过程

    我需要使用经典 ASP 将参数传递到存储过程中 我确实看到有些人使用 Command 对象 而其他人则不使用它 我的存储过程参数是这样的 RECORD NUMBER decimal 18 0 ErrorType nvarchar 100 I
  • 如何让 Cobertura 因代码覆盖率低而导致 M2 构建失败

    如果行或分支覆盖率低于给定阈值 我正在尝试将 WAR 项目构建配置为失败 我一直在使用这本优秀书籍第455页提供的配置Java电动工具 但没有成功 这是我的项目 Maven 2 POM 的相关片段
  • 从长度为 N 的数组中返回前 k 个值的最佳算法

    我有一个包含 n 个浮点的数组 我希望返回前 k 个 在我的例子中 n 100 k 10 该问题是否有已知的最佳解决路径 谁能提供一个C算法吗 编辑 实际上这里有两个问题 排序和未排序 我对未排序感兴趣 这应该更快 Method 1 由于k
  • 计算给定角度和长度的向量

    有没有什么办法 在javascript中 我可以调用一个带有x和y坐标以及方向 以度为单位的角度 的函数 并且它将返回一组已 移动 10px的新坐标按照原始坐标给出的方向 我环顾四周 但我所能找到的只是获得两个给定坐标的角度的方法 该函数返
  • 如何在 Firebase Firestore Android 发生更改时实现通知?

    有两种类型的应用程序 一种由用户使用 另一种由我 即所有者 使用 因此 每当任何用户将内容 数据 添加到 Cloud Firestore 数据库时 我都希望收到通知 简而言之 如何在 Cloud Firestore 数据库发生更改时发送通知
  • 覆盖maven中第三方jar的依赖

    像这样org carrot2取决于commons httpclient 3 1那么我该如何改变这个commons httpclient 3 1 to HttpClient 4 1 1 我正在日食中工作 正如我想删除的commons http
  • PHP 闭包作用域问题

    显然 pid 超出了这里的范围 难道它不应该与函数一起 关闭 吗 我相当确定这就是闭包在 javascript 中的工作原理 根据一些文章php 闭包被破坏 所以我无法访问this 那么怎样才能 pid可以从这个闭包函数访问吗 class
  • 有没有可以模拟不稳定网络连接的程序? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我们需要模拟不稳定的网络连接 以尝试调试服务器 客户端应用程序中的一些连接问题 我想知道是否有任何程序可以模拟这些条件 例如在微弱的无线网络上 我指
  • 如何在命令行工具中获取 Apple Swift 语言的用户输入? [复制]

    这个问题在这里已经有答案了 我是 Apple 编程新手 我想尝试一下 Swift 但我不知道如何获取用户输入并将其存储在变量中 我正在寻找最简单的方法来做到这一点 比如Python中的input 和raw input Something l
  • 在 TDD 中,为什么选择 OpenEJB,为什么选择 Arquillian?

    我是一名 Web 开发人员 最终参与了一些 Java EE 开发 Richfaces Seam 2 EJB 3 1 JPA 为了测试 JPA 我使用 hypersonic 和 Mockito 但我缺乏更深入的 EJB 知识 有些人可能会说我