spring - 单元测试 Spring ApplicationEventPublisher
问题描述
我正在尝试为以下代码编写单元测试:
public void doSomething(List<Object> someObjects){
// Some logic I want to test...
eventPublisher.publishEvent(someEvent);
}
所以在项目中我调用这个方法来对对象列表执行一些逻辑,然后它发布应用程序事件,结果是一个被接收的方法。
我想用单元测试验证该方法内部的逻辑,但如果该方法不直接返回任何内容但发布域事件,我不确定如何编写单元测试。这样做的正确方法是什么?
谢谢你的帮助。
解决方案
作为单元测试的一部分,验证 `eventPublisher. 用正确的参数调用。另外,请记住,单元测试是要测试的方法的每一行代码的文档。
您必须模拟eventPublisher
in 测试并使用ArgumentCaptor
它来捕获在调用消息时传递的参数。
理想情况下,您的测试应如下所示:
public class ClassToBeTestedTest {
@Mock
private ApplicationEventPublisher eventPublisher;
@InjectMocks
private ClassToBeTested classToBeTested;
@Captor
private ArgumentCaptor<SomeClass> captor;
@Before
public void init() {
initMocks(this);
}
@Test
public void testSend() throws Exception {
classToBeTested.doSomething(Arrays.asList());
verify(eventPublisher).publishEvent(captor.capture());
assertThat(captor.getValue(), is("expected value"))
}
}
推荐阅读
- javascript - 刽子手游戏,我的代码选择一个单词然后生成一个隐藏的单词长度,然后出于某种原因选择另一个单词?
- html - 中心标志与背景图像一起显示
- html - 协助构建线框部分
- composer-php - autoload.php中ComposerAutoloaderInit后的随机字符串有什么作用?
- javascript - NodeJS Observable 订阅不返回任何内容
- java - 无法使用书中的 java AWT 示例添加复选框组
- google-chrome-extension - 是否可以在 Chrome 扩展弹出面板上使用 Chrome 的内置 Roboto 字体?
- android - 为什么 Android View Client 返回我尝试选择的视图上方的视图?
- python-3.x - 当网格单元格中的 CellEditor 更改时尝试触发事件
- javascript - Apollo 服务器 RESTDataSource - 接受自签名证书