2014-12-31 55 views
0

隨着JMockit V12,這個測試通過(不是真正的代碼,但足以說明問題):Jmockit:期望()工作在V12但不是在V13/V14(Java SE的8,TestNG的13年6月8日)

import mockit.Expectations; 
import mockit.Mocked; 
import org.testng.Assert; 
import org.testng.annotations.Test; 

public class JmockitExperimentsTest2 
{ 
    public class MyClass 
    { 
    public int getValue() 
    { 
     return 5; 
    } 
    } 
    @Mocked 
    MyClass myClass; 

    @Test() 
    public void jmockitTest() 
    { 

    new Expectations() 
    { 
     { 
     myClass.getValue(); 
     returns(8); 
     myClass.getValue(); 
     returns(4); 
     } 
    }; 
    Assert.assertEquals(myClass.getValue(), 8); 
    Assert.assertEquals(myClass.getValue(), 4); 
    } 
} 

隨着JMockit V13(和V14)它得到此斷言失敗:

java.lang.AssertionError: expected [8] but found [4] 

我得到了V13/V14相同的斷言失敗,如果我在的地方「預期」的使用「NonStrictExpectations」。但是,如果我在v13/v14中將「期望」更改爲「嚴格期望」,則不存在斷言失敗。

我從JMockit change log看到,在第13版中對Expectations進行了更改,所以我可能不瞭解更改日誌中關於預期內容的描述。但看起來這種變化不是向後兼容的。

讓我非常困惑的是,爲什麼「嚴格」的作品和「非嚴格」沒有 - 我期望隨時「嚴格」成功,「非嚴格」也會成功。

我在做什麼錯?


更新:

使用的Rogerio的答案,下面的改變消除了問題:

new Expectations() 
{ 
    { 
    myClass.getValue(); 
    returns(8, 4); 
    } 
}; 
+0

好的,在這裏扮演魔鬼的擁護者,但你有沒有考慮換用mockito? – fge

+0

@fge,爲什麼會考慮從'JMockit'切換到'Mockito'?這可以說是最完整的測試/模擬解決方案。 – mystarrocks

+0

@mystarrocks表示還沒有嘗試過mockito的人......我已經抽樣了; mockito絕對優越,如果只有一點:易於使用 – fge

回答

0

測試失敗,因爲它冗餘記錄相同的預期的兩倍。相反,通過調用具有所需返回值的整個序列的返回來記錄一次,因爲它是可變參數方法。

JMockit 1.13中的語義更改是爲了防止錯誤發生,但對重複期望的驗證仍然是一個懸而未決的問題,需要在版本1.15中修復。

相關問題