2014-07-14 16 views
5

Tôi muốn còn sơ khai một hàm trả về AnyVal sử dụng Mockito trong Scala (Specs2 để được chính xác), nhưng nó không đường may để làm việc:Làm thế nào để mô phỏng chức năng trả về AnyVal với Mockito trong Scala/Specs2?

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 
      } 
     } 
    } 
} 

này không thành công với:

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

tôi tìm thấy loại giải pháp thay thế (dựa trên đó tôi đã cung cấp đoạn mã trên) bằng cách sử dụng giao diện điểm đánh dấu/đặc điểm: https://gist.github.com/mtgto/9251779

nhưng đây không phải là giải pháp cho tôi, do đó nó thay đổi kiểu trả về (do mocking/test vấn đề thư viện).

Bất kỳ ai đã thấy điều này trước đây và biết cách khai thác chức năng như vậy?

Trả lời

5

tôi tìm thấy một cách để stubbing chức năng này - sử dụng doReturn gốc Mockito với loại cơ bản AnyVal của (String trong trường hợp này) thay vì AnyVal bản thân, vì vậy:

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

thay vì:

a.f returns new V("hoge") 
+0

Tôi đã thử một vài điều và tôi không nghĩ rằng có một cách tốt hơn là những gì bạn đang làm. 'doReturn' không được gõ vào trong khi' returns' là vì vậy đây là lý do tại sao nó hoạt động. Một vấn đề nữa trong tương tác Scala/Java. vấn đề cuốn sách tôi đoán. – Eric

Các vấn đề liên quan