2017-04-19 38 views
0

因爲我can't fake an abstract class directly和我知道實施類,我添加了假實施類。如何刪除抽象方法的jMockit Fake/MockUp?

@BeforeClass 
public static void fakeCurrentYear() { 
    // Mocking the abstract 'Calender' does not work, see: https://github.com/jmockit/jmockit1/issues/71 
    // So we use the implementing class 'GregorianCalendar'. 
    new MockUp<GregorianCalendar>() { 

     @Mock public int get(Invocation invocation, int field) { 
      return 2016; 
     } 
    }; 
} 

我使用jMockit v 1.31與JUnit 4.12和Maven 3.x.

當我單獨執行測試時,一切都很好。

但是,當我一起執行所有測試時,另一個測試失敗,因爲實現類中的log4jlogger顯然使用假實現。

我認爲這是因爲之前GregorianCalendar沒有覆蓋該方法。但是,我認爲這個假的是在測試類之後自動刪除的!這是一個錯誤?

我可以手動刪除它嗎?我嘗試回到JMockit v1.25,創建一個靜態變量yearMock = new MockUp<GregorianCalendar>() ...,並在@AfterClass方法中調用yearMock.tearDown(),但它沒有改變任何內容。

回答

0

我用一種變通方法,在這裏我創建的類中的方法測試下的代碼

private int currentYear4digits() { 
    return Calendar.getInstance().get(Calendar.YEAR); 
} 

只是一個單一的線在我的測試,然後我嘲笑這個方法。

@BeforeClass 
public static void fakeCurrentYear() { 
    new MockUp<MyClass>() { 

     @Mock 
     public int currentYear4digits() { 
      return 2016; 
     } 
    }; 
} 

但是,這只是一種解決方法。如果電話號碼Calendar由幾個類組成,那將會很麻煩。