【问题标题】:JMock and Scala - unexpected invocation errorJMock 和 Scala - 意外调用错误
【发布时间】:2013-03-19 10:05:10
【问题描述】:

我是 JMock 的新手,并试图通过 Scala 进行简单的单元测试。测试是模拟一个接口,然后在模拟接口上执行一个方法之前设置一些期望值。

 val context = new Mockery
 val mockObj= context.mock(classOf[SomeClassInterface])

 @Test def sometest = {
 context.checking(
      new Expectations() {
        allowing (mockObj).doFunc1(); 
        will(returnValue(someResponse);
        allowing (mockObj).doFunc2(someResponse); 
        will(returnValue(someResponse));
        allowing (mockObj).doFunc3(someResponse); 
        will(returnValue("Enabled"));
       }
 )
 var status:String = mockObj.doSomething()
 //context.assertIsSatisfied();
 Assert.assertTrue(status.equalsIgnoreCase("Enabled"))

}

这会导致错误;

意外调用; mockObj.doSomething() ......在这之前发生了什么;什么都没有!

有什么想法吗?

【问题讨论】:

  • 您的期望不允许调用doSomething 方法。它们只允许在mockObj 上调用doFunc1doFunc2doFunc3(而你根本不调用这些方法,为什么要允许它们呢?)。
  • 我认为这个想法是只对可能被称为调用 doSomething 的副产品的方法设置期望。在我的情况下,每当调用 doSomething 时,都会导致调用 doFunc1 2 & 3 方法
  • 原因如何?你说SomeClassInterface是一个接口,所以没有doSomething的实现。无论如何,即使有一个实现,创建一个模拟对象的整个想法就是不要使用它。

标签: scala junit mocking jmock


【解决方案1】:

不确定 Scala,但您是否缺少双 '{{' '}}' 语法?我们对此感到非常抱歉,但这是我们在 Java 中所能做的最好的事情。

外层“{}”是匿名子类,内层“{}”是初始化块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多