7

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

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

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

4

3 回答 3

2

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

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

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

于 2014-04-19T06:37:41.153 回答
1

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

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

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

于 2014-04-19T06:22:35.590 回答
0

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

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

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

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

于 2014-04-19T06:12:04.770 回答