在我们的项目中,我们使用@AutoConfigureMockMvc
,默认情况下保留printOnlyOnFailure
,true
。
这正常工作,不打印任何请求……除非任何测试失败。此时,它会打印之前执行过的 ALL 测试中的所有请求。尽管有时这可能有用,但它可能会打印大量日志,如果它在CI服务器上发生,则日志将被截断,并且我们甚至无法看到哪个测试失败了(因为之后打印了AssertionError
。 / p>
更糟糕的是:如果多个测试失败,则会为每个失败的测试打印所有先前的请求。
是否可以对其进行配置,使其仅打印失败测试的请求?
以下是重现该问题的示例测试:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MockMvcTest {
@Autowired
private MockMvc mockMvc;
@Test
public void successfulTest() throws Exception {
mockMvc.perform(get("/successfulTest"))
.andExpect(status().isNotFound());
}
@Test
public void failingTest() throws Exception {
mockMvc.perform(get("/failingTest"))
.andExpect(status().isOk());
}
@Test
public void failingTest2() throws Exception {
mockMvc.perform(get("/failingTest2"))
.andExpect(status().isOk());
}
@Configuration
static class TestApplication {
}
}
我们正在使用spring-boot 1.5.14和Java8。我还重现了spring-boot 2.1.4的问题。
从我发现的情况来看,日志行存储在org.springframework.boot.test.autoconfigure.web.servlet.SpringBootMockMvcBuilderCustomizer.DeferredLinesWriter.lines
中,并且永远不会重置,也似乎没有办法重置它-我宁愿避免通过反射来做到这一点。 / p>
答案 0 :(得分:1)
因此,我尝试将更多精力投入到SpringBootMockMvcBuilderCustomizer
实现中,所有内容似乎都是private
或protected
,从而阻止了重用任何内容(甚至不确定您是否可以重用{{ 1}}本身,由于唯一的构造函数是PrintingResultHandler
,因此您不得不对其进行扩展。
虽然使用反射不是太难,但将其添加到测试中:
protected
不太干净,可能会在将来的Spring Boot版本中中断,但可以使用。
我希望可以实施更好的解决方案,但恐怕不可能。