我有一个从前端调用的java/jersey api。我需要为java代码编写测试。代码的编写方式是: 1. api调用执行资源方法,该方法调用一个单独的方法,该方法从db获取数据并返回给资源方法。然后这将向客户端返回一个javax.ws.rs.core.Response。
这将是我第一次写测试,所以考虑到我什么都不知道,请回答。从这里开始最好的方法是什么?以及我应该写什么类型的测试。单元测试是我在这里的目标。
现在我已经在这里做了很多研究,我倾向于使用JUnit + Mockito来做这件事。但是如何检查响应对象中的数据呢?
我应该如何检查从db获取数据的另一个文件?我发现DBUnit可以做到这一点,但是我需要它吗?
我遇到的另一个框架是放心的。我也需要包括这一点吗?或者可以用JUnit/Mockito做同样的事情?
我只想从测试过jersey api的人那里得到一些指导,并想知道最常见的方法是什么。
发布于 2019-06-26 09:47:44
我不认为有一个最好的方法来做到这一点,您需要测试的内容通常是主观的,并取决于上下文。
然而,你可以以这样一种方式构建你的代码:最重要的部分可以很容易地测试,剩下的(集成)可以在以后/使用不同的工具来完成。
我在这里建议的是遵循六边形架构的原则。这个想法是保持在你的应用程序的中心,没有任何种类的依赖(导入...)任何框架(jaxrs、jpa等)所有业务规则。使用TDD可以很容易地设计这些规则。然后,您将有非常短的运行测试。可能有必要使用SPI 来模拟接口的实现。
第二次,您可以通过将适配器连接到外部世界(HTTP、数据库、AMQP等)、使用API并实现SPI接口来使用此“核心”。
如果您想测试这些适配器,您可以退出单元测试的范围,并编写集成测试。集成一个框架,一个协议,任何东西。这类测试可以使用各种各样的工具,从与框架相关的模拟(如Jersey测试框架)、内存数据库(如H2)到使用testcontainers.等工具的完全可操作的中间件实例
在编写集成测试时需要记住的重要一点是,它们在单元测试方面速度很慢。为了使反馈循环尽可能短,您需要将集成测试的数量限制在最小。
希望这能对你有所帮助!
https://stackoverflow.com/questions/56762368
复制