【发布时间】:2019-10-31 20:34:28
【问题描述】:
我正在尝试处理 Rest api 测试。 嗯,我代码中的控制器连接到外部api解析并以JSON的形式返回。 我正在尝试运行一个测试,以便它返回我的应用程序逻辑的结果。 不幸的是,在测试过程中我无法连接 api github。
java.lang.AssertionError: Status expected:<200> but was:<404> Expected :200 Actual :404
@WebMvcTest(RepositoryDetailsController.class)
@ContextConfiguration(classes = RepositoryDetailsController.class)
class RepositoryDetailsControllerTestt {
@Autowired
private MockMvc mvc;
@MockBean
private RepositoryDetailsService service;
@InjectMocks
private RepositoryDetailsController repositoryDetailsController;
@Before
public void setUp() {
mvc = MockMvcBuilders.standaloneSetup(repositoryDetailsController).build();
}
@Test
public void mockTest() throws Exception {
RepositoryDetailsResponse details = new RepositoryDetailsResponse();
details.setDescription("Ruby toolkit for the GitHub API");
details.set"https://github.com/octokit/octokit.rb.git");
details.setStars("57892");
details.setName("octokit/octokit.rb");
mvc.perform(get("repository/{owner}/{repository}","octokit","octokit.rb")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("$.*", hasSize(5)))
.andExpect(jsonPath("$.fullName").value(details.getName()))
.andExpect(jsonPath("$.description").value(details.getDescription()))
.andExpect(jsonPath("$.cloneUrl").value(details.getUrl()))
.andExpect(jsonPath("$.stars").value(details.getStars()));
}
【问题讨论】:
-
你可以试试
mvc.perform(get("/repository/{owner}/{repository}","octokit","octokit.rb")吗?另外,如果有.andDo(print())的输出就好了 -
理想情况下,您不会在测试期间连接到实际资源——这样做意味着您的测试数据受服务器支配,这意味着您实际上无法测试 i> 因为你没有控制响应。这也意味着如果测试机器和服务器之间存在任何问题,您将进行非确定性测试。
标签: java spring testing junit mocking