2010-09-17 37 views
9

我發現這個example他們使用PowerMock和EasyMock存根/模擬android的Menu和MenuItem類。我一直在嘗試用PowerMock和Mockito做類似Activity的事情。嘗試使用PowerMockito存根android Activity類拋出RuntimeException「Stub!」

我知道很多方法都是final的,在Android.jar中它們都拋出RuntimeException(「Stub!」)。

我也明白,這個測試並不完整,但我只是想看看是否有可能嘲笑android活動類。

但是,鑑於PowerMock允許你用final方法模擬類,不應該使用這種代碼嗎?

@RunWith(PowerMockRunner.class) 
@PrepareForTest(Activity.class) 
public class MyTestCase extends TestCase { 

    public void testPlease_JustWork() throws Exception { 
     Activity mockActivity = PowerMockito.mock(Activity.class); 

     PowerMockito.when(mockActivity.getTitle()).thenReturn("Title"); 
    } 
} 

我會認爲RuntimeException不會再發生,「標題」將被返回,但它仍然會引發異常。

我已經試過各種不同的東西像doReturn("Title").when(mockActivity).getTitle();suppress(constructor(Activity.class));

我做得不對,或者這是不可能的?

回答

0

我只是試過你的代碼示例,它在這裏工作,很奇怪。我使用Mockito和JUnit下載PowerMock 1.4.5,包括依賴關係,並使用了sdk(2.2)中的android.jar。它只會失敗,如果我刪除@PrepareForTest。

編輯

您可以使用與刪除異常代碼的android.jar,你所引用的文章中提供。

+0

我會試試看... – bytebender 2010-09-27 22:38:24

+0

沒有骰子,你能告訴我你的進口線是什麼樣子嗎? – bytebender 2010-09-27 22:52:10

+0

我已經將整個eclipse項目上傳到http://maik.0x2a.at/PowerMockTests.zip。你可能需要修改路徑到android.jar – crazymaik 2010-09-27 22:59:30

5

可能不是您的問題的直接答案,但您可以嘗試Robolectric爲了測試您的PC上的Android應用程序的部分。

Roboelectric避免了殘局!異常,並給你一些最小 Android類實現

2

我認爲答案是,您引用的庫的順序很重要,因爲android.jar包含junit的一些存根。

您必須確保在您的測試項目中,如果轉到'屬性',然後'Java Build Path',那麼與下載的完整版powermock關聯的junit jar會顯示在'Order and Export'標籤以上 android.jar。如果沒有,系統會解析來自android.jar的junit.framework和junit.runner軟件包,然後將其從包含在powermock中的junit.jar解析出來。

我意識到這個問題是舊的,但我認爲這是正確的答案,所以我想確保在問題上記錄它。

相關問題