You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Akka-Stream结合Mockito使用时出现thenReturn不是Nothing成员错误如何解决

问题原因分析

你遇到的value thenReturn is not a member of Nothing错误,本质是Scala编译器类型推断失败,导致Mockito的when方法返回类型被推断为Nothing,而Nothing类型不存在thenReturn方法,和你的mock逻辑本身无关,问题出在Source的构造写法上。

原代码的核心错误

  • 原代码中构造Akka Stream的写法错误:Source("Dummy Byte string")会把Source的元素类型推断为Char,但方法声明要求的是元素类型为ByteString的Source[ByteString, NotUsed],二者类型完全不匹配。
  • 类型不匹配触发了连锁的泛型推断问题:Mockito的when是泛型方法,当thenReturn传入的参数类型和目标方法的返回类型不匹配时,编译器无法正确推断when的泛型参数,最终就会将其推断为Nothing,也就找不到对应的thenReturn方法。

修改后代码生效的原因

你单独定义的val source = Source.single(ByteString("Some dummy string")),明确构造了元素类型为ByteString的Source,和方法声明要求的返回类型完全匹配,编译器可以正常推断when的泛型参数,自然就能正常调用thenReturn方法。

补充方案

你也可以不用单独定义变量,直接在tuple内写正确的Source构造方式即可生效:

when(service.fetchData(id)).thenReturn(Future.successful(
  Some((ContentTypes.`application/octet-stream`, 1000, Source.single(ByteString("Dummy Byte string"))))
))

内容的提问来源于stack exchange,提问作者Mandroid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:45:01