我是單元測試新手,我的經理推薦Mockito。我正在探索這個工具,但是有像有些混亂:爲什麼我們需要創建模擬對象?
爲什麼我們需要創建模擬對象,而我們可以創建任何類的實物。
爲什麼我們在開發人員設置方法的行爲時,使用stubbing(如'when and then')條件設置任何方法的行爲。
如果我們做任何方法的存根,那麼它將是靜態的,如果開發者改變了那個方法的代碼,那麼它的影響就不會出現在我們的測試用例中,它總是會通過。
例如:
TestingServices test = Mockito.mock(TestingServices.class);
// define return value for method getUniqueId()
System.out.println("unique id is "+test.getUniqueId());
when(test.getUniqueId()).thenReturn(44);
assertEquals(test.getUniqueId(),44);
在上面的代碼片斷assertEquals
將總是通過,顯影劑是否改變的代碼或沒有。
您的測試是一個壞榜樣,因爲它是單元測試它的嘲諷同樣的事情。在一個真實的例子中,你可以通過嘲笑B來單元測試A,以便隔離A的行爲,反之亦然。然後你會有更高層次的集成測試,檢查A和B在兩者都不被模擬時仍然正確交互。 – jonrsharpe
嗨Jonrsharpe,謝謝你給我回答。其實我的擔憂是爲什麼我們需要瘋狂的模擬物體和殘肢?請解釋一下,你的幫助會清除我的疑惑。 –
嗨Exoddus,你可以給我更多的例子,當我們創建模擬對象或當不需要創建它。 –