【问题标题】:Unit testing a REST-Service对 REST 服务进行单元测试
【发布时间】:2012-11-05 13:32:08
【问题描述】:

我有一个基于 spark-framework 的 REST 服务。看起来像这样(简化):

public void init() {

    get(new Route("spark/favorites") {
        @Override
        public Object handle(Request request, Response response) {
            ExternalService exS= new ExternalService();             

            ArrayList<String> favs= exS.getFavorites();

            Gson gson = getGson();
            return gson.toJson(favs);
        }
    });
 }

现在我想为我的服务编写一些测试,看看我的 get/post/put/delete 是否符合我的要求。 因此,我在测试期间将其部署在嵌入式 Jetty 上。

我现在面临的问题是我的服务依赖于外部 REST 服务。我想模拟对这些的所有调用(进行快速单元测试)。但我不知道如何在运行的服务中模拟。

这可能吗?我应该切换到另一个 REST 框架吗? 有什么建议吗?

【问题讨论】:

  • 请添加您用于访问第三方 REST 服务的生产代码。只有这样我们才能提出模拟这些的方法。
  • 我想模拟 ExternalService 类这样的类。
  • 如果您依赖 Jetty 启动,这不是单元测试。这是一个集成测试。
  • 对我来说,集成测试包括与其他组件的交互,这是我不希望模拟的。如果您知道一种在没有码头的情况下测试火花课程的方法,我对此感到满意吗?我宁愿在没有码头的情况下这样做。但到目前为止,这是我知道的访问 spark 提供的 REST 路由的唯一方法。
  • 我不认为你应该切换到另一个框架只是因为它更容易进行单元测试......

标签: java unit-testing rest jetty


【解决方案1】:

这是一个集成测试,无论您的应用是与 Web 服务模拟还是真正的第 3 方 Web 服务通信。单元测试是当你单独测试你的类时。

如果您想模拟外部 Web 服务,您需要将指向 3rd 方应用程序的链接设置为可配置的,并且有一个单独的配置仅用于集成测试。 对于 web 服务模拟,您可以使用几个可用的模拟框架之一: https://sourceforge.net/projects/soaprest-mocker

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 2018-11-09
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    相关资源
    最近更新 更多