尝试模拟Querydsl SQLQueryFactory时发生ClassCastException

尝试模拟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”的未命名模块中)

可能是什么问题?

linchao911 回答:尝试模拟Querydsl SQLQueryFactory时发生ClassCastException

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

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

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

@Mock
本文链接:https://www.f2er.com/2994784.html

大家都在问