2011-06-07 195 views
8

當前我正在測試一個獲取對象並檢查該對象是否存儲爲實例變量的類實例的方法。到目前爲止沒有問題。檢查模擬對象的類類型

但在測試中我必須使用mock,其中一個mock是傳遞給該方法的對象。現在,它變得棘手。讓我們來看看代碼(我總結了本次測試的代碼):

Class<AdapterEvent> clazz = AdapterEvent.class; 
    AdapterEvent adapterEvent = Mockito.mock(AdapterEvent.class); 

    Assert.assertTrue(adapterEvent.getClass().equals(clazz)); 
    Assert.assertTrue(adapterEvent.getClass().isAssignableFrom(clazz)); 

那麼,這個測試實際上失敗。有誰知道爲什麼?有人有一個想法,我怎樣才能解決這個問題,仍然在測試中使用模擬?是否有另一種比較對象與特定類的方法。

非常感謝您的幫助。

問候

赫拉爾

+0

您可能需要接受下面的答案之一(如果是正確的)。 – walters 2012-09-19 07:55:25

回答

2

我認爲的instanceof會工作,你希望它的方式:

Assert.assertTrue(adapterEvent instanceof AdapterEvent); 

你確定你應該甚至可以測試這個?不知道你想要完成什麼,這很難說,但我認爲這個測試可能沒有必要。

8

你的第一個斷言是從來沒有是真的 - Mockito嘲笑是一個全新的類,所以一個簡單的equals()將永遠不會工作。順便說一下,對於像這樣的測試,如果您使用Assert.assertEquals(),則第一個參數是預期結果;如果您使用Assert.assertEquals(),則會獲得更有用的失敗消息;例如:

Assert.assertEquals(clazz, adapterEvent.getClass()); 

你的第二個斷言是正確的,但你已經混在一起的isAssignableFrom()方向(很容易做到,JavaDoc中是強大的混亂) - 翻轉過來,它和你的黃金:

Assert.assertTrue(clazz.isAssignableFrom(adapterEvent.getClass())); 
0

嘲笑類是從原始類的子類,所以只是檢查超,就像這樣:

Assert.assertTrue(。adapterEvent.getClass()getSuperclass之()等於(clazz所));

+0

更好的是使用'Assert.assertEquals(clazz,adapterEvent.getClass()。getSuperclass());'。那麼當測試失敗時,你會得到一個更有用的錯誤信息。 – 2016-06-01 13:23:02

1

Mockito 2.0.0中有一種新方法getMockedType,它返回最初傳入Mockito.mock(Class)的類。我建議使用這種方法,因爲getSuperClass()技術在所有情況下都不起作用。

MockingDetails mockingDetails = Mockito.mockingDetails(mockObj); 
Class<?> cls = mockingDetails.getMockedType(); 
1

要測試的對象返回你期望那麼類的實例做以下

Assert.IsInstanceOfType(adapterEvent, typeof(AdapterEvent)); 
+2

雖然這個答案也許可以解決問題,但總是添加解釋。 – 2017-11-24 06:44:49