在scala中对Double使用ArgumentCapture的ClassCastException



我在scala中使用ArgumentCapture作为Double时遇到问题。我正试图捕捉一个被嘲笑的特质的Double论点。当尝试捕获Int时,同样的语法也可以正常工作。

下面是一个测试示例:

import org.scalatest.FunSuite
import org.scalatest.mock.MockitoSugar
import org.mockito.Mockito._
import org.mockito.ArgumentCaptor
trait MockedTrait {
    def mockedDoubleMethod(double: Double)
    def mockedIntegerMethod(integer: Int)
}
class ClassUnderTest(myTrait: MockedTrait) {
    def methodUnderTest {
        myTrait.mockedIntegerMethod(3)
        myTrait.mockedDoubleMethod(5.0)
    }
}
class MyTest extends FunSuite with MockitoSugar {
    test("A basic test") {
        val myTrait = mock[MockedTrait]
        val classUnderTest = new ClassUnderTest(myTrait)
        classUnderTest.methodUnderTest
        val capturedInteger = ArgumentCaptor.forClass(classOf[Int])
        verify(myTrait).mockedIntegerMethod(capturedInteger.capture)
        val capturedDouble = ArgumentCaptor.forClass(classOf[Double])
        verify(myTrait).mockedDoubleMethod(capturedDouble.capture) // Throws ClassCastException
    }
}

我得到以下异常:

java.lang.Integer cannot be cast to java.lang.Double
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double
    at scala.runtime.BoxesRunTime.unboxToDouble(Unknown Source)
    at MyTest$$anonfun$1.apply$mcV$sp(MyTest.scala:30)
    at MyTest$$anonfun$1.apply(MyTest.scala:20)
    at MyTest$$anonfun$1.apply(MyTest.scala:20)
    at org.scalatest.FunSuite$$anon$1.apply(FunSuite.scala:1265)
    at org.scalatest.Suite$class.withFixture(Suite.scala:1968)
    at MyTest.withFixture(MyTest.scala:18)

有什么建议吗?

我也遇到过类似的问题。这应该会解决它,我相信:

val capturedDouble = ArgumentCaptor.forClass(classOf[java.lang.Double])

相关内容

  • 没有找到相关文章

最新更新