尝试模拟Querydsl SQLQueryFactory时发生ClassCastException

时间:2019-12-02 09:15:33

标签: mockito classcastexception querydsl

尝试模拟Querydsl的SQLQueryFactory进行DAO单元测试。首次使用Mockito的深层存根。 以下是失败的最小代码

@Test
void tryMockQueryDsl() {
    SQLQueryFactory sql = Mockito.mock(SQLQueryFactory.class, Mockito.RETURNS_DEEP_STUBS);
    Mockito.when(sql.select(ArgumentMatchers.<Expression<?>>any())
            .from(ArgumentMatchers.<Expression<?>>any())
            .fetchFirst()
    ).thenReturn(null);
}

,但以下情况除外:

  

java.lang.ClassCastException:com.querydsl.sql.ProjectableSQLQuery $ MockitoMock $ 1584151766类不能转换为com.querydsl.sql.SQLQuery类(com.querydsl.sql.ProjectableSQLQuery $ MockitoMock $ 1584151766和com.querydsl.sql。 SQLQuery位于加载程序“ app”的未命名模块中)

可能是什么问题?

1 个答案:

答案 0 :(得分:0)

无法施放假人。代替sass-loader自己模拟每个方法并返回预期类的模拟实例。

如果您不想抑制未定义泛型类型的警告,则可以使用RETURN_DEEP_STUBS批注来创建模拟,如here所述。

此示例对测试用例没有多大意义(因为它不进行任何测试),但是它展示了如何避免异常。

@Mock