【问题标题】:Scala Mockito: Discarded non-unit value for Unit declarationScala Mockito:单位声明的丢弃非单位值
【发布时间】:2019-04-10 21:18:44
【问题描述】:

谁能解释一下这是什么意思

Error:(32, 28) discarded non-Unit value dataFrameReader.load() wasCalled once

看了一些网上的文章,不太明白。

这是我使用 Scala Mockito 进行 ScalaTest 的代码 sn-p

 ...
 val dataFrameReader = mock[DataFrameReader]
 dataFrameReader.format(anyString) shouldReturn dataFrameReader
 dataFrameReader.option(anyString, anyString) shouldReturn dataFrameReader
 dataFrameReader.load() wasCalled once

如果我取出wasCalled once,那么它可以正常工作

我不明白这意味着什么,因为我在 load() 返回的内容上调用“wasCalled”并且wasCalled once 解析为一个单位

我在这里错过了什么?

【问题讨论】:

  • 您返回的值/最后一个值的类型不同于Unit,而预期的返回类型是Unit,因此该值被丢弃(可能是设计不良的症状)
  • 我没听懂,请你解释一下
  • @cchantep 好像返回了Unit:github.com/mockito/mockito-scala/blob/…

标签: scala


【解决方案1】:

假设您从 Apache Spark 模拟 DataFrameReader.load,那么它的返回类型实际上是 DataFrame 而不是 Unit

def load(): DataFrame

另一方面,wasCalled 的返回类型确实是Unit

def wasCalled(t: Times)(implicit order: VerifyOrder): Unit

因此我们有类似的情况

def f(): Unit = {
  g() // g returns DataFrame which gets discarded by f
}

def g(): DataFrame

如果设置了scalacOptions += "-Ywarn-value-discard",编译器会对其进行标记。

mockito-scala 1.2.2 以来,问题一直是resolved

【讨论】:

  • 好的,那么我该如何解决上面的例子呢?我尝试了不同的东西,提取变量和函数等,但无法超越这一点。这是 Mockito 库中的缺陷吗?
  • 考虑为这样的测试禁用编译器标志:scalacOptions in Test -= "-Ywarn-value-discard"
  • 以编程方式怎么样?
  • Here 是一个可以解决问题的拉取请求。
  • 更新到 mockito-scala 1.2.2 应该可以解决问题。
猜你喜欢
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
  • 2020-09-23
  • 2023-03-22
  • 1970-01-01
  • 2021-02-02
  • 2018-03-17
  • 2016-08-09
相关资源
最近更新 更多