Может ли Mockito обрабатывать методы, возвращающие обобщения в Scala?

#generics #scala #mockito

#обобщения #scala #mockito

Вопрос:

Я хочу имитировать возврат из javax.servlet.http.HttpServletRequest, getParameterNames(). Поэтому:

 import org.specs.Specification
import org.specs.mock.Mockito
import scala.collection.JavaConversions._
import javax.servlet.http.HttpServletRequest

object SomethingSpec extends Specification with Mockito {
    "Something" should {
        "do something" in {
            val request = mock[HttpServletRequest]

            // This is fine
            val elements: java.util.Enumeration[String] = List("p1", "p2").iterator

            // But this bombs
            request.getParameterNames() return elements
        }
    }
}
  

Компиляция последней строки приводит к этой трудной для понимания ошибке:

 found   : java.util.Enumeration[String]
required: java.util.Enumeration[?0] where type ?0
  

Я делаю что-то не так?

Ответ №1:

вы пытались привести возвращаемое значение из HttpServletRequest, например

 request.getParameterNames().asInstanceOf[java.util.Enumeration[String]] returns elements
  

Похоже, getParameterNames возвращает нетипизированное перечисление.

Комментарии:

1. Похоже на ошибку Mockito, поскольку getParameterNames определенно возвращает перечисление [String] . Но это помогает мне обойти проблему. Спасибо!