1.介绍

我们经常发现自己使用执行某种web请求的应用程序。当涉及到测试这种行为时,我们有几个选项有春天的应用程序。

一世在这个快速的教程中,我们将看一看仅仅通过一个resttemplate.

我们将开始使用Mockito进行测试,这是一个流行的mocking库。然后,我们将使用Spring Test,它为我们提供了一种机制来创建一个模拟服务器来定义服务器交互。

2.使用5

我们可以使用mockito嘲笑resttemplate.共。通过这种方法,测试我们的服务将像其他任何其他一样简单涉及嘲笑的测试

让我们假设,我们有一个简单的员工服务Class,通过http获取员工详细信息:

@Service public class EmployeeService {@Autowired private RestTemplate RestTemplate;public Employee getEmployee(String id) {ResponseEntity resp = restTemplate. gettemplate (String id);getForEntity(“http://localhost:8080/employee/”+ id, Employee.class);return res . getstatuscode () == HttpStatus。好吗?resp.getBody():空;}}

让我们实现对前面代码的测试:

@runwith(mockitojunitrunner.class)公共类员工服务{@mock private resttemplate resttemplate;@injectmocks私人员工服务eMpservice =新员工服务;@test public voidedmockingisdonebymockito_whengetiscalled_shouldreturnmockedobject(){employee emp =新员工(“E001”,“Eric Simmons”);Mockito。(resttemplate.getForentity(“http:// localhost:8080 /雇员/ e001”,employee.class)).thenreturn(新响应(EMP,httpStatus.ok));员工员工= empservice.getEmployee(ID);assert.assertequals(EMP,员工);}}

在上面的JUnit测试类中,我们首先要求Mockito创建一个假人resttemplate.实例使用@嘲笑注解。

然后,我们已经注释了员工服务实例@injectmocks.将虚拟实例注入其中。

最后,在测试方法中,我们已经确定了模仿的行为Mockito的何时/然后支持

3.使用Spring测试

Spring测试模块包括名为的模拟服务器MockRestServiceserver。使用此方法,我们将服务器配置为在通过我们发送特定请求时返回特定对象resttemplate.实例。最后,我们可以核实()在该服务器上,是否已满足所有期望。

MockRestServiceServer实际上通过使用a拦截HTTP API调用来工作MockClienthttpRequestFactory.。根据我们的配置,它创建了预期请求和相应的响应列表。当。。。的时候resttemplate.实例调用API,它在其期望列表中查找请求并返回相应的响应。

因此,它消除了在任何其他端口中运行HTTP服务器的需要,以发送模拟响应。

让我们创建一个简单的测试getemployee()使用MockRestServiceServer

@runwith(springrunner.class)@contextconfiguration(classes = springtestconfig.class)public类employeeservicemockrestserviceserverunittest {@autowired私人员工服务empservice;@autowifired私有reastemplate resttemplate;私人模仿服务器Mockserver;Private ObjectMapper Mapper = New ObjectMapper();@Before public void init(){mockserver = mockrestserviceserver.createserver(resttemplate);@test public void给gendmockingisdonebymockrestserviceserver_whengetiscalled_thenreturnsmockedobject()(){employee emp =新员工(“E001”,“Eric Simmons”);mockserver.expect(perpectCount.once(),请求(新URI(“http:// localhost:8080 / employee / e001”))).Andexpect(方法(httpmethod.get)).andrespond(withstatus(httpstatus.ok).contenttype(mediatype.application_json).body(mapper.writevalueastring(emp))));员工员工= empservice.getEmployee(ID);mockserver.verify(); Assert.assertEquals(emp, employee); } }

在上一个片段中,我们使用静态方法MockRestRequestMatchers.MockRestResponseCreators以清晰可读的方式定义REST调用的期望和响应:

导入静态org.springframework.test.web.client.match.mockrestrequestmatchers。*;导入静态org.springframework.test.web.client.response.mockrestresponsecreators。*;

我们应该记住resttemplate.在测试类中应该是使用的相同实例员工服务类。为了确保这一点,我们在spring配置中定义了一个RestTemplate bean,并在测试和实现中自动连接了实例:

@Bean公共resttemplate resttemplate(){返回新resttemplate();}

用一个MockRestServiceServer当我们编写集成测试时非常有用,只需要模拟外部HTTP调用。

4。结论

在这篇简短的文章中,我们讨论了在编写单元测试时讨论了在HTTP上嘲笑外部RESP API调用的一些有效选项。

上述文章的源代码可用在GitHub

通用底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
对这篇文章的评论关闭!