首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ScalaMock不会模仿我的TextMessage

ScalaMock不会模仿我的TextMessage
EN

Stack Overflow用户
提问于 2016-03-31 23:16:39
回答 4查看 553关注 0票数 0

我正在使用ScalaMock3,并试图在我的ScalaTest规范中创建一个模拟的javax.jms.TextMessage

代码语言:javascript
复制
import javax.jms.TextMessage
import org.scalamock.scalatest.MockFactory
import org.scalatest.{Matchers, WordSpecLike}

class MySpec extends WordSpecLike
  with Matchers
  with MockFactory {

  "MySpec" should {
    "create the mock I want!" in {

      val msg = mock[TextMessage]
      msg.getText _ expects() returning "my_text"

      msg.getText shouldBe "my_text"
    }
  }
}

然而,当我尝试编译时,我得到了以下结果:

代码语言:javascript
复制
[error] /my/path/MySpec.scala:14: could not find implicit value for evidence parameter of type org.scalamock.util.Defaultable[java.util.Enumeration]  
[error] val msg = mock[TextMessage] 
                      ^

在网上寻找,我找到了这个(未解决的) issue,但我希望有人能至少建议一个解决办法……

谢谢

EN

回答 4

Stack Overflow用户

发布于 2016-04-01 22:38:12

基本上,这是由于Java1.4和Java1.5版本之间的>=差异造成的。

TextMessage使用Java1.4非泛型类型java.util.Enumeration (从getPropertyNames返回从javax.jms.Message继承的类型),而在较新的JVM中,java.util.Enumeration<E>是带有类型参数的泛型类。

当ScalaMock尝试创建此接口的模拟实例时,它在以下位置失败:

代码语言:javascript
复制
null.asInstanceOf[java.util.Enumeration] 
Main.scala:46: trait Enumeration takes type parameters

不幸的是,我不认为你能做太多。

票数 1
EN

Stack Overflow用户

发布于 2019-02-18 18:13:25

ScalaMock有一个已修复的问题:https://github.com/paulbutcher/ScalaMock/issues/29

将以下代码添加到您的代码中:

代码语言:javascript
复制
implicit val d = new Defaultable[java.util.Enumeration[_]] {
  override val default = null
}
票数 1
EN

Stack Overflow用户

发布于 2016-08-02 00:34:26

虽然这不是一个最佳的解决方案,但将有问题的类嵌入到包装器类中可以模拟测试套件中的行为。

代码语言:javascript
复制
class TextMessageWrapper {
  lazy val textMessage: TextMessage = ???

  def getMessage() = textMessage.getMessage()
}

然后,您可以在需要TextMessage实例的任何地方传递wrapper.textMessage

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36337415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档