mocking - 如何验证链式方法调用?

标签 mocking mockito

我正在为我项目的 DAO 类编写测试。但是,当我使用 Mockito 的 verify() 方法时,它会抛出 NullPointerException,因为 createQuery() 方法返回 null。我该如何解决这个问题?

@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private EntityManager entityManagerMock;

@InjectMocks
private TaksitPlanSatiriDao taksitPlanSatiriDao = new TaksitPlanSatiriDaoJpa();

@Before
public void setUp() {
    taksitPlanSatiriEntity = new TaksitPlanSatiriEntity();
}
@Test
public void shouldUpdateWhenGuncelleCalledWithTaksitPlanSatiriEntity() {
    taksitPlanSatiriDao.guncelle(taksitPlanSatiriEntity);
    Mockito.verify(entityManagerMock).createQuery(ArgumentMatchers.anyString()).executeUpdate();
}

最佳答案

尝试:

Mockito.verify(entityManagerMock.createQuery(ArgumentMatchers.anyString())).executeUpdate();

这基于“Deep Stubs”文档:

https://static.javadoc.io/org.mockito/mockito-core/2.28.2/org/mockito/Mockito.html#RETURNS_DEEP_STUBS

关于mocking - 如何验证链式方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56684824/

相关文章:

django - 使用 post_save 信号模拟 django 模型上的方法

java - JUnit、Mockito 和 Spring ApplicationContext : Trouble mocking a property

java - 模拟 HttpServletResponse 并将其传递给 ServletActionContext - 并获取响应对象

java - 如何使用具有特定属性的参数对方法进行 stub

java - 模拟 : mock method call with parameters by reflection

java - 如何使用 Mockito 测试 api?我们需要模拟所有的类变量吗?

python - 如何在 Python 单元测试中将模拟对象注入(inject)实例属性

java - 如何模拟 Google Guava 缓存生成器?

javascript - 在客户端模拟 HTTP 请求

python - 模拟还是 stub ?