2017-10-13 116 views

回答

1

当您使用MockMvc时,您正在测试应用程序的一个实例,其中HTTP请求周期已被模拟。所以,这里的测试范围只是您的应用程序的MVC方面。我认为这通常不会被称为“集成测试”,而是更接近单元测试(尽管它的范围比单个类大得多)。

当您使用TestRestTemplate您正在测试您的应用程序,即你“雨后春笋”整个应用程序上下文的真正实例,并调用它作为外部演员。这通常被称为“集成测试”,它可能是最接近您的实际使用情况的测试。

现在,由于通过TestRestTemplate调用的“完整堆栈”集成测试可以提供MockMVC测试提供的覆盖范围的超集,因此您可能想知道为什么您会打扰MockMVC测试。如果是这样,那么我认为这是一个问题... ...

  • 测试范围; MockMVC测试用例通常比完整的集成测试更快,更容易启动(因为它们使用的应用程序上下文更少)。另外,由于他们使用较少的appolication上下文,您可能不必努力去模拟您的应用上下文在测试中表现不佳的任何方面。

  • 易用性; MockMVC附带静态助手,用于断言HTTP状态,询问和断言JSON响应等。当然YMMMV,但对于许多人来说,这些易于开发并帮助提供可读的测试用例。

在实践中,你也许想用这两种方法的组合:

  • MockMVC测试整个控制器层的详细测试,包括所有的映射,快乐与悲伤路径,所有调用以及对HTTP状态代码,内容主体等的深刻断言
  • TestRestTemplate从用户角度表达的主要流程的测试例如Save a new FooSearch for all FoosSubmit an invalid Foo update等使用断言侧重于哪些用户看到/感兴趣的位。
+0

感谢您的详细解释!我唯一不能确定的是MockMVC测试更快。它需要完全相同的时间(在我的机器上) – DimarZio

相关问题