java - 使用 MockMvc 对控制器进行单元测试时如何捕获 logger.error 消息?
问题描述
我有一个Spring Boot
应用程序,我需要验证无论何时请求失败(不同于200
)系统都会记录状态代码和消息。到目前为止,我找不到验证的方法logger
。有什么办法Mockito
吗?
MyControllerTest
代码:
@RunWith(MockitoJUnitRunner.class)
@TestPropertySource(locations = "classpath:application-test.yml")
public class MyControllerTest {
private MockMvc mockMvc;
@Mock
private RestTemplate localRestTemplate;
@InjectMocks
private MyController myController;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.standaloneSetup(myController).build();
}
@Test
public void test() throws Exception {
given(localRestTemplate.getForEntity("/test", String.class))
.willReturn(new ResponseEntity<>("Unsupported media type", HttpStatus.UNSUPPORTED_MEDIA_TYPE));
mockMvc.perform(get(MY_URL))
.andExpect(status().isOk());
}
}
MyController
代码:
@RestController
@RequestMapping(value = "/my/url")
public class MyController {
protected final static Logger logger = LoggerFactory.getLogger(MyController.class);
private final RestTemplate localRestTemplate;
@Autowired
public MyController(RestTemplate localRestTemplate) {
this.localRestTemplate = localRestTemplate;
}
@Scheduled(cron = "-")
@GetMapping(path="/report")
public void getReport() {
try {
localRestTemplate
.getForEntity("/test", String.class);
} catch (RestClientException e) {
logger.error("Couldn't trigger report generation!", e);
}
}
}
我进行了研究,其中一种可能的解决方案是通过Spy
或通过将修饰符更改为public
. 这两种解决方案都不适用于我当前的配置。
还有什么我想念的东西可以帮助我验证logger
内容,或者至少,如果logger
被调用?
解决方案
推荐阅读
- php - 合并或组合两个数组 - 仅当指定的 id 存在时
- c++ - C++:外部类中静态内部类实例的构造和销毁
- git - 如果我的 GitHub 存储库也是已发布的 npm 模块,我可以归档它吗?
- javascript - 在javascript中将sort和uniq函数合并为1
- python - 将列表值转换为数据框
- pandas - 对均值 pandas 的 T 检验
- javascript - 在 Angular 中的单选按钮上选择所有实现
- javascript - 为几个输入 Vue.js 计算出不同的结果
- python - 如何在不更改主分支的情况下更改本地 git 存储库的功能分支?
- scala - java.lang.NoSuchMethodError:com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper