scala objectのMock
テストコードでscalaのobjectをモック化したい。
モック化したいobjectは以下。このクラスはJavaからも呼ぶため、class宣言もしている。
class Booこれをモック化するコード
object Boo {
val log = LogFactory.getLog(this.getClass())
def foo = {
log.debug("Boo#foo called")
true
}
}
@MockClass(realClass=classOf[Boo])テストコード
object BooMock {
val log = LogFactory.getLog(this.getClass())
@Mock def foo = {
log.debug("BooMock#foo called")
false
}
}
class JMockitTest {これを実行しても、
val log = LogFactory.getLog(this.getClass())
@Test def foo {
setUpMocks(classOf[BooMock])
log.debug(Boo.foo)
}
}
DEBUG (JMockitTest.scala:15) Boo#foo calledとなって、モックが呼ばれない。
DEBUG (JMockitTest.scala:51) true
一方で、テストコードをJavaにしてみる。
public class JMockit2Test {これを実行すると、
private static Log log = LogFactory.getLog(JMockit2Test.class);
@Test public void foo() {
setUpMocks(BooMock.class);
log.debug(Boo.foo());
}
}
DEBUG (JMockitTest.scala:26) BooMock#foo calledとなって、モックが呼ばれるようになる。scalaのテストコードではobjectをモック化できないが、Javaのテストコードではできる。解決方法が今のところみつからない。
DEBUG (JMockit2Test.java:25) false