【问题标题】:Should we test getForObject?我们应该测试 getForObject 吗?
【发布时间】:2019-10-02 18:00:36
【问题描述】:

我正在编写一个简单的 REST 客户端,我的服务类有一个使用方法

RestTemplate.getForObject()

我想练习测试,但我真的不知道我们是否应该测试课程。我也不知道如何测试没有多大作用的方法。我应该编写任何单元测试吗?

【问题讨论】:

标签: java spring-boot junit mockito


【解决方案1】:

您可以测试,该请求已发送。例如你有下一个服务:

@Service
public void QueryService {

    private final RestTemplate restTemplate;

    @Autowired
    public QueryService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public List<Employee> void makeQuery() {
        ResponseEntity<List<Employee>> response = restTemplate.getForObject(
            "http://localhost:8080/employees",
            EmployeeList.class);
        return response.getEmployees();
    }
}

对于makeQuery这个方法你可以写下一个单元测试:

@RunWith(MockitoJUnitRunner.class)
public class QueryServiceTest {

    @Mock
    private RestTemplate restTemplate;

    @InjectMocks
    private QueryService queryService;

    @Test
    public void testMakeQueryRequestHasBeenSent() {
        List<Employee> result = queryService.makeQuery();

        // This string checks that method getForObject has been invoked
        verify(restTemplate).getForObject(anyString(), any(Class.class));
    }
}

以后如果你改变makeQuery方法,忘记使用restTemplate发送请求,这个测试会失败。

【讨论】:

  • 我尝试了您的解决方案,但测试类中的方法 queryService.makeQuery() 会引发 NPE,即使它在服务类中运行良好。知道我在做什么错吗?
  • 这可能是因为您没有正确模拟queryService。我为你创建了simple project,它运行良好,不会被 NPE 所困扰。
猜你喜欢
  • 2010-12-01
  • 1970-01-01
  • 2014-09-27
  • 2021-10-09
  • 2020-05-30
  • 2021-08-08
  • 2019-10-15
  • 1970-01-01
相关资源
最近更新 更多