2016-03-31 19 views
0

私はScalaMock3を使用していますが、ScalaTest仕様内にjavax.jms.TextMessageのモックを作成しようとしています。私がコンパイルしようとするとScalaMockはTextMessageをモックしません

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

しかし、私は次の取得:オンライン探し

[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を見つけましたが、私は、周りの仕事で誰かが提案する可能性が期待していました少なくとも...

おかげで

答えて

1

基本的にはこれが理由のJava 1.4および> = 1.5のバージョン間のAPIの違いを発生します。新しいJVMでjava.util.Enumeration<E>タイプパラメータを持つジェネリッククラスであるのに対し

TextMessageは、Java(登録商標)1.4非ジェネリック型java.util.Enumerationjavax.jms.Messageから継承getPropertyNamesからの戻り型)を使用します。

ScalaMockは、このインタフェースの嘲笑のインスタンスを作成しようとすると、それが失敗します。

null.asInstanceOf[java.util.Enumeration] 
Main.scala:46: trait Enumeration takes type parameters 

私はずっとあなたが、残念ながら行うことができますが、ないと思います。

0

最適な解決策ではありませんが、違反クラスをラッパークラスに組み込むことで、テストスイート内の動作を嘲笑することができます。

class TextMessageWrapper { 
    lazy val textMessage: TextMessage = ??? 

    def getMessage() = textMessage.getMessage() 
} 

その後、TextMessageのインスタンスが必要とされている場所

0

あなたはこのを試してみましたwrapper.textMessageを渡すことができますか?

implicit object DefaultableEnumeration extends Defaultable[java.util.Enumeration[Object]] { 
    val default = new java.util.Enumeration[Object] { 
     override def hasMoreElements: Boolean = false 
     override def nextElement: Object = throw new NoSuchElementException("no elements") 
    } 

私はjava.util.List<T>でこのエラーを持って、コンパイラは、この後に文句を停止したとき、私は似た何かをしました。

関連する問題