2012-11-02 23 views
2

我不太了解以下测试的行为。看看它,和test_Not_OK是严格等价的 - 唯一的区别是有“内联”callMethod使用实例初始化程序调用的方法记录期望

但是,通过,而test_Not_OK失败。是否有这种行为的原因?

public class MethodCallTest { 
    @Test 
    public void test_Not_OK() { 
     new NonStrictExpectations() { 
      Whatever w; 
      { 
       callMethod(); 
      } 
      private void callMethod() { 
       w.method(); 
       result = 1; 
      } 
     }; 
     assertEquals(new Whatever().method(), 1); //fails 
    } 

    @Test 
    public void test_OK() { 
     new NonStrictExpectations() { 
      Whatever w; 
      { 
       w.method(); 
       result = 1; 
      } 
     }; 
     assertEquals(new Whatever().method(), 1); //passes 
    } 

    public static class Whatever { 
     public int method() { 
      return 0; 
     } 
    } 
} 

回答

2

好问题。原因在于JMockit对ExpectationsNonStrictExpectations子类的构造函数和初始化块中的字节码执行了某些转换。 (本质上讲,这是这样做的嘲讽API的工作。例如,每一项任务的特殊result场实际上是在方法调用替换,以便它能够正确地与当前预期有关。)

方法然而,在预期区块,尚未转变。他们应该是,所以我现在正在实施它。从下一个版本(0.999.19)开始,这将得到支持。

相关问题