簡體   English   中英

如何模擬在Scala / Specs2中使用Mockito返回AnyVal的函數?

[英]How to mock function returning AnyVal with Mockito in Scala / Specs2?

我想在Scala中使用Mockito(確切地說是Specs2)來存儲返回AnyVal的函數,但是它不會工作:

import org.specs2.mutable._
import org.specs2.mock._

case class V(s: String) extends AnyVal

class A {
  def f: V = new V("Hello")
}

class Sample extends Specification with Mockito {
    "Mockito" should {
        "mock A" in {
            val a = mock[A]
            a.f returns new V("hoge")
            a.f match {
                case V("hoge") => success
                case _ => failure
            }
        }
    }
}

這失敗了:

V cannot be returned by f()
f() should return String

我使用標記接口/特征找到了一種解決方法(基於我在上面提供的代碼片段): https//gist.github.com/mtgto/9251779

但這對我來說不是任何解決方案,因此它會更改返回類型(因為模擬/測試庫問題)。

以前任何人都看過這個並且知道如何存根這樣的功能?

我發現了一種簡化此功能的方法 - 使用原始的Mockito的doReturn與底層AnyVal的類型(在本例中為String)而不是AnyVal本身,所以:

org.mockito.Mockito.doReturn("hoge").when(a).f

代替:

a.f returns new V("hoge")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM