【发布时间】:2018-08-30 12:20:14
【问题描述】:
我有一个控制器正在发布一个事件
@RestController
public class Controller
{
@Autowired
private ApplicationEventPublisher publisher;
@GetMapping("/event")
public void get()
{
publisher.publishEvent(new Event());
}
}
现在我想测试该事件是否已发布。首先,我尝试@MockBean ApplicationEventPublisher 并验证方法调用。但是根据https://jira.spring.io/browse/SPR-14335这是行不通的
所以我是这样做的:
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = Controller.class)
public class ControllerTest
{
@Autowired
private MockMvc mockMvc;
@Test
public void getTest() throws Exception
{
this.mockMvc.perform(get("/").contentType(MediaType.APPLICATION_JSON)
.andExpect(status().isOk());
assertNotNull(Listener.event);
}
@TestConfiguration
static class Listener
{
public static Event event;
@EventListener
void listen ( Event incoming )
{
event = incoming;
}
}
}
对于这个常见的用例有没有更简单的方法?
【问题讨论】:
标签: spring spring-boot testing event-handling