所以..。最近,我被强行介绍到了单元测试的奇妙世界(grunt的因果报应(AngularJS在中间)),这是一次疯狂的旅程;我真的不敢相信我的代码在没有测试用例的情况下是如何保持在一起的……
无论如何,回到我的问题,在我正在做的Java项目中,我已经向大多数类添加了单元测试……但是现在我遇到了一个问题,我找不到答案(或者我问错了问题),但是如何在Java语言中正确地进行e2e测试呢?我可以使用JUnit来做这件事吗?或者我应该使用完全不同的东西?我的项目还涉及大量的数据库移动,最近我读到如果测试使用数据库,它就不再是单元测试……这个测试也应该被修改吗?
这实际上是我第一次在这里发布问题=),但我多年来一直在这个网站上寻找答案……如果有任何额外的数据我应该添加或更改,请让我知道…我提前感谢在座的每一个人,不仅感谢他们对这个问题的回答,也感谢这个很棒的网站帮助人们分享的所有问题的答案……
发布于 2014-04-19 14:37:41
我之前的所有答案都是有用的,所以我不会重复相同的信息。
是的,如果你在测试中访问了一个数据库,那么它就不是一个单元,而是一个集成测试,或者在javascript社区中被称为端到端的测试(但我不知道他们为什么不坚持使用相同的术语)。根据我的经验,最好在@Before中启动一个事务,并在@After方法中拒绝它。通过这种方式,您可以确保您的结果尽可能接近真实世界,因为您不是在模拟数据库访问(这样您就可以检测数据库端是否发生了问题)。
你也会看到许多相反的观点,人们想要模拟数据库访问,以便测试可以更快地运行,但我认为,在这个时代,速度不再是问题,所以你可以访问数据库,而不是模拟它:)
发布于 2014-04-19 14:22:36
在开发实际代码时,理想情况下应该为大部分具有功能的类编写单元测试。在这样做的时候,大多数代码并不是完全有效的。因此,您已经编写了单元测试。
您的单元测试应该独立运行,而与服务器和数据库无关。这是通过使用mockito、easymock和jmockit等模拟框架实现的。
一旦整个功能开始工作,如果愿意,您可以使用junit编写集成测试。确保每个测试都独立于任何其他测试是很重要的。此外,如果可能的话,您甚至应该在测试套件中自动启动和关闭服务器。例如,用于测试grizzly API的jersey- test -framework有一个嵌入式RESTful服务器,其中部署了用于测试的web服务,而实际的服务器并不在图片中。
发布于 2014-04-19 14:12:05
在Java中,只有JUnit不能用于e2e测试。你需要使用很多第三方工具,这些工具可以在不同的测试层中使用。
使用JUnit测试DAO调用,理想情况下,您可能不希望连接到数据库,因为如果您的测试在使用Maven时运行,并且此时数据库中没有数据,那么您的测试将失败,并以停止项目的整个构建而结束,这不应该发生在生产环境中的构建过程中。
那么如何克服这个问题呢?你将需要模拟你的数据库调用,因为你可以使用MOCKITO第三方toll来模拟数据库调用。因此,在net上还有其他工具可供使用。
理想情况下,只使用JUnit来测试包含某些逻辑的代码,并且您希望这种逻辑以特定的方式工作。测试代码中具有项目业务层逻辑的各种方法。
https://stackoverflow.com/questions/23166297
复制相似问题