集成测试中MockMvc和RestTemplate之间的区别

丹尼斯·德·阿兹维多(Denis C de Azevedo):

无论MockMvcRestTemplate用于与Spring和JUnit集成测试。

问题是:它们之间有什么区别,何时应该选择一个?

这只是两个选项的示例:

//MockMVC example
mockMvc.perform(get("/api/users"))
            .andExpect(status().isOk())
            (...)

//RestTemplate example
ResponseEntity<User> entity = restTemplate.exchange("/api/users",
            HttpMethod.GET,
            new HttpEntity<String>(...),
            User.class);
assertEquals(HttpStatus.OK, entity.getStatusCode());
nivash:

正如在说这个文章你应该使用MockMvc当你想测试服务器端应用程序:

Spring MVC Test建立在模拟请求和响应的基础上,spring-test不需要运行中的servlet容器。主要区别在于,实际的Spring MVC配置是通过TestContext框架加载的,而请求是通过实际调用DispatcherServlet运行时使用和所有相同的Spring MVC基础结构来执行的。

例如:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration("servlet-context.xml")
public class SampleTests {

  @Autowired
  private WebApplicationContext wac;

  private MockMvc mockMvc;

  @Before
  public void setup() {
    this.mockMvc = webAppContextSetup(this.wac).build();
  }

  @Test
  public void getFoo() throws Exception {
    this.mockMvc.perform(get("/foo").accept("application/json"))
        .andExpect(status().isOk())
        .andExpect(content().mimeType("application/json"))
        .andExpect(jsonPath("$.name").value("Lee"));
  }}

而且RestTemplate你应该使用当你想测试休息客户端应用程序:

如果您使用编写代码RestTemplate,则可能需要对其进行测试,并且可以针对正在运行的服务器或模拟RestTemplate。客户端REST测试支持提供了第三种选择,即使用实际值,RestTemplate但使用自定义配置它,以ClientHttpRequestFactory根据实际请求检查期望并返回存根响应。

例:

RestTemplate restTemplate = new RestTemplate();
MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);

mockServer.expect(requestTo("/greeting"))
  .andRespond(withSuccess("Hello world", "text/plain"));

// use RestTemplate ...

mockServer.verify();

也读这个例子

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

功能测试和集成测试之间的区别

Angular中的单元测试,集成测试和端到端测试之间有什么区别?

MockMvc peform 在集成测试中返回 nullPointerException

单元,功能,验收和集成测试之间有什么区别?

Django测试中TestCase和TransactionTestCase类之间的区别

气流中“气流运行”和“气流测试”之间的区别

Julia中基准测试和时间宏之间的区别

测试容器中StartupCheckStrategy和WaitStrategy之间的区别

验收测试和功能测试之间的区别?

Spring oAuth2中OAuth2RestOperations和OAuth2RestTemplate之间的区别

随机测试和随机测试中随机测试状态之间的区别?

单元测试和集成测试有什么区别?

IIS7中“经典”和“集成”管道模式之间有什么区别?

处理单元测试和集成测试之间的重复

Android Instrumentation测试和Android Studio中的单元测试之间的区别?

iTunes Testflight beta测试中内部和外部测试人员之间的区别?

在Python3中使用单元测试和正常进行测试之间的区别

基准测试和性能分析之间的区别

验收测试和验证之间的区别?

Apache Kafka和Camel之间的区别(代理与集成)

R中&和&&&之间的区别

MySQL中=和:=之间的区别

Python中[]和[[]]之间的区别

之间的区别 和|| 在PHP中

JavaScript中==和===之间的区别

r中“!”和“-”之间的区别

“ OR”和“ ||”之间的区别 在SQL中?

bash中“”和“”之间的区别

XPath中// * /和/ * //之间的区别?