代码之家  ›  专栏  ›  技术社区  ›  Harshana

Spring boot REST应用程序测试方法

  •  3
  • Harshana  · 技术社区  · 10 年前

    我有一个Spring boot+REST应用程序。当我需要编写单元测试时,我应该直接调用服务bean还是调用rest控制器?如果我直接调用rest控制器,我必须使用RestTemplate并将rest api作为客户端调用,对吗?

    最佳和必需的做法是什么?

    如果我直接调用服务bean,将导致代码覆盖率降低,因为控制器方法代码将不被覆盖。这可以接受吗?

    4 回复  |  直到 8 年前
        1
  •  2
  •   Taylor    10 年前

    嗯,这是一个复杂的问题,但我会尽我所能回答。这在很大程度上取决于您/您的组织的风险承受能力以及他们想在测试中投入多少时间。我相信很多测试,但有一件事是太多了。

    http://martinfowler.com/bliki/UnitTest.html 但单元基本上是应用程序中最小的可测试部分。

    大量文献(例如。 https://www.amazon.ca/Continuous-Delivery-Reliable-Deployment-Automation/dp/0321601912/ )描述了测试的多个阶段,包括非常低级别的单元测试和模拟外部性,如数据库、文件系统或远程系统,以及“api验收测试”(有时称为集成测试,尽管这是一个模糊的术语,可能意味着其他事情)。后一种类型触发应用程序的测试实例,对响应调用API和断言。

    简言之,答案如下:对于单元测试,关注单元(可能是服务或更细粒度的),但您描述的另一组测试,其中测试的行为类似于客户端并调用您的api,也是值得的。我的建议是:两者都做,但不要同时调用两个单元测试。

        2
  •  1
  •   Community Mohan Dere    9 年前

    最佳方法是测试VIA控制器。在此处输入WebServices并返回值。因此,Controller在这方面发挥了相当好的作用。也可能有一些小的逻辑,你可能会错过

    您可以尝试使用 MockMvc 控制器的测试方法。

    参考文献: Reference-1 , Reference-2

    或者使用您在问题中提到的RestTemplate Reference-3

        3
  •  0
  •   Bassem Reda Zohdy    10 年前

    它基于您想要测试的内容,您可以分离您的测试,特别是如果您有开发人员团队,则可以制作测试用例来测试您的业务“服务”,并将另一个测试用例作为集成测试来使用REST模板,在这种情况下,您可以更快、更容易地发现错误。

        4
  •  0
  •   Alexandru Marina    10 年前

    这取决于你想做什么。

    一种方法是对工作单元进行单元测试,比如服务和MVC控制器。这些测试将只测试这些类中的最终逻辑,并尝试达到较高的分支覆盖率(如果适用)。

    http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#spring-mvc-test-framework