当前位置: 首页 > 知识库问答 >
问题:

尝试模拟Querydsl SQLQueryFactory时出现ClassCastException

红鸿运
2023-03-14

尝试模拟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 . query DSL . SQL . projectablesql query $ mockito mock $ 1584151766不能转换为类com . query DSL . SQL . SQL query(com . query DSL . SQL . projectablesql query $ mockito mock $ 1584151766和com . query DSL . SQL query在加载程序“app”的未命名模块中)

可能是什么问题?

共有1个答案

卫俊誉
2023-03-14

不能强制转换Mocks。不是RETURN_DEEP_STUBS单独模拟每个方法并返回预期类的模拟实例。

如果不想禁止显示因未定义泛型类型而收到的警告,则可以改用@Mock注释来创建模拟,如此处所述。

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

@RunWith(MockitoJUnitRunner.class)
public class Test {

    @Test
    public void tryMockQueryDsl() {

        ProjectableSQLQuery projectableQuery = Mockito.mock(ProjectableSQLQuery.class);

        // not really needed as this is the default behaviour
        Mockito.when(projectableQuery.fetchFirst()).thenReturn(null);

        SQLQuery query = Mockito.mock(SQLQuery.class);
        Mockito.when(query.from(ArgumentMatchers.<Expression<?>>any())).thenReturn(projectableQuery);

        SQLQueryFactory sql = Mockito.mock(SQLQueryFactory.class);      
        Mockito.when(sql.select(ArgumentMatchers.<Expression<?>>any())).thenReturn(query);

        Expression expr = Mockito.mock(Expression.class);
        sql.select(expr).from(expr).fetchFirst();
    }
}
 类似资料:
  • 当我单击“开始”按钮时,emulator不工作。我能做什么?请帮帮我!这是错误: 我能做什么?请帮帮我! 不可预期的顶级例外:ain.run运行时异常:C:\用户\维森\\Android\Probeta\app\build\中介\类\调试:文件未找到ain.java:246FileUcom.android.dx.command.dexer.文件(FileUain.main)ain.java:215

  • 我正试图模拟JOptionPane静态方法,但却被困在Java上。lang.VerifyError。所有版本都是最新的,因为我刚刚下载了Mockito的PowerMock及其所有依赖项。 我不能使用前面问题的答案来包装类和包装器的子类-这在我们的应用程序中无处不在。目前我已经在PowerMock上投入了相当多的时间,我不想从fest开始。 有没有办法解决这个错误?我在说明中尝试了“模拟静态方法”和

  • C:\users\asd\appdata\local\android\sdk\tools\emulator.exe-avd Nexus_5_API_21_x86-netspeed full-netdelay none创建文件系统并使用参数:大小:69206016块大小:4096块/组:32768 Inode/组:4224 Inode大小:256日志块:1024标签:块:16896块组:1保留块组大

  • 我正在尝试在Cooja/Contiki上启动我的第一个模拟器,但出现以下错误:

  • 每当我在输入命令npx react native run android后尝试测试应用程序时,就会出现以下错误。我试着在环境变量中设置路径。但仍然不起作用我尝试重新安装react native,但仍然不起作用。我试图从java重新安装JDK,但最后,该应用程序仍然无法在模拟器中运行。感谢您的反馈:) 失败:生成失败,出现异常。 出错的地方:任务执行失败:react-native-community

  • 我试图上传一个图像到内存使用multer,然后处理它与夏普和保存到磁盘。当我尝试在我的中间件中做多个module.exports时。 错误是: TypeError FileUpload.Single不是函数 到目前为止的路线是: 当我刚刚有下面的路由之前,尝试添加图像处理,我没有得到一个错误;