如何编写Java e2e(端到端)测试

时间:2014-04-19 05:35:02

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

所以...最近,我被强有力地介绍了单元测试的奇妙世界(grunt的业力(中间的AngularJS)),这是一个疯狂的旅程;我真的无法相信我的代码如何在没有测试用例的情况下保持在一起......

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

这实际上是我第一次在这里发布一个问题=)但是我已经使用该网站多年找到答案了...如果有任何额外的数据我应该添加或更改,请,让我知道......我提前感谢所有人,不仅仅是对这个问题的答案,而是对所有问题的所有答案,这个令人敬畏的网站帮助人们分享......

3 个答案:

答案 0 :(得分:2)

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

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

你也会看到很多意见,人们想要模拟数据库访问,以便测试可以更快地运行,但我认为在这个时间和年龄的速度不再是一个问题所以你可以点击数据库而不是模拟它:)

答案 1 :(得分:0)

只有JUnit不能用于Java中的e2e测试。你需要使用许多第三方工具,你可以在不同的测试层使用它们。

使用JUnit测试DAO调用的示例理想情况下,如果您的测试在使用Maven时运行,并且数据库中没有数据存在,那么您的测试将无法以停止结束您在项目生成环境中构建期间不应发生的整个构建。

那么如何克服这个问题呢。你需要模拟你的数据库调用你可以使用MOCKITO第三方收费模拟数据库调用。因此,您可以使用网络上的其他工具。

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

答案 2 :(得分:0)

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

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

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