【问题标题】:How to write Java e2e (end to end) tests [closed]如何编写 Java e2e(端到端)测试 [关闭]
【发布时间】:2014-04-19 05:35:01
【问题描述】:

所以...最近我被强行介绍到单元测试的美妙世界(grunt 的业力(AngularJS 在中间)),这是一次疯狂的旅程;我真的不敢相信我的代码是如何在没有测试用例的情况下结合在一起的......

无论如何,回到我的问题,在我正在做的 Java 项目中,我一直在为大多数类添加单元测试......但现在我遇到了一个我找不到的问题一个答案(或者我可能问错了问题),但是我如何正确地在 Java 中进行 e2e 测试?我可以为此使用 JUnit 吗?还是我应该完全使用其他东西?我的项目还涉及大量数据库移动,最近我读到如果测试使用数据库,它就不再是单元测试了......是否也应该修改这些测试?

这实际上是我第一次在这里发布问题 =) 但多年来我一直在使用该网站寻找答案......如果有任何额外的数据我应该添加或更改,请告诉我.. .我提前感谢这里的每一个人,不仅仅是这个问题的答案,而是这个很棒的网站帮助人们分享的所有问题的所有答案......

【问题讨论】:

  • 顺便说一下e2e testing 在“非javascript”世界中被称为integration testing(至少在java 中)。如果您使用该词进行搜索,您将收到更多关于如何进行搜索的结果。我真的不知道为什么他们称之为端到端而不是集成。
  • @amb E2E TestIntegration Test 是不同的。许多人将它们混淆为相同,但事实并非如此。 E2E Test 就是所谓的UI Test,使用E2E Test,您可以以与真实用户体验相同的方式测试产品。

标签: java unit-testing junit end-to-end


【解决方案1】:

我之前的所有答案都很有用,所以我不会重复相同的信息。

是的,如果在您的测试中遇到数据库,那么它不是一个单元,而是一个集成测试,或者在 javascript 社区中称为端到端(但我不知道他们为什么没有卡住使用相同的术语)。 根据我的经验,最好在@Before 中启动事务并在@After 方法中拒绝它。通过这种方式,您可以确保您的结果尽可能接近真实世界,因为您没有模拟数据库访问(因此您可以检测数据库端是否发生问题)。

您还会看到很多相反的意见,人们希望模拟数据库访问以便测试可以更快地运行,但我认为在这个时代,速度将不再是问题所以你可以点击数据库而不是模拟它:)

【讨论】:

  • 所以,我问错了问题... =) 我在搜索 java e2e 却无处可去...。我正在按照你说的做,在 @ 中启动数据库连接BeforeClass 并在 @AfterClass 中结束...但是我为此使用 JUnit...我现在正在研究 java 集成测试,希望我能得到我需要的东西 =) 谢谢
  • 不客气 :) 您应该提供有关您正在使用的框架(Spring、JEE 标准等)的更多详细信息。
  • 我知道问这个问题有点奇怪,但是你能支持我的问题,这样我就有足够的代表来支持其他有用的答案吗?我一直在尝试投票并得到“你需要 15 个代表”,这很烦人 =(
  • @Dixel 好的,我赞成你的问题 :)
  • 非常感谢队友 =) 干杯
【解决方案2】:

在开发实际代码时,理想情况下,您应该为大部分具有功能的类编写单元测试。这样做时,大多数代码并不完全正常。所以你已经编写了单元测试。

无论服务器和数据库如何,您的单元测试都应该独立运行。这可以通过使用 mockito、easymock 和 jmockit 等模拟框架实现。

一旦整个功能开始工作,您可以根据需要使用 junit 编写集成测试。确保每个测试独立于任何其他测试非常重要。此外,如果可能,您甚至应该在测试套件中自动启动和关闭服务器。例如,用于测试 RESTful API 的 jersey-test-framework 有一个嵌入式 grizzly 服务器,在该服务器上部署了用于测试的 Web 服务,而实际的服务器不在图片中。

【讨论】:

    【解决方案3】:

    只有 JUnit 不能用于 Java 中的 e2e 测试。您将需要使用许多可用于不同测试层的 3rd 方工具。

    使用 JUnit 测试 DAO 调用的示例,如果您的测试在使用 Maven 时运行并且当时数据库中没有数据,那么您可能不希望连接到数据库,因为此时您的测试将失败并最终停止您项目的整个构建过程不应在生产环境中进行。

    那么如何克服这个问题。如果您可以使用 MOCKITO 3rd 方收费来模拟数据库调用,您将需要模拟您的数据库调用。所以网上还有其他工具可以使用。

    理想情况下,仅使用 JUnit 来测试包含某些逻辑的代码,并且您希望该逻辑以特定方式工作。测试代码中具有项目业务层逻辑的各种方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多