2012-11-02 63 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)開始,這將得到支持。

相關問題