2015-06-19 73 views
0

我正在測試一個有很多邏輯的方法。它是這樣的:是否可以使用Mockito完全停止運行方法?

public void doSomething(int number){ 

    //... complex logic 

    if (number % 2 == 0) 
     someInstanceObject.setOdd(false); 
    else 
     someInstanceObject.setOdd(true); 

    //... more complex logic and database connections 
} 

Mockito可能只是在if-else語句之後結束方法執行嗎?我想這樣做的原因是因爲我想用Mockito.verify()來測試兩個條件。我希望它立即停止,因爲在if-else塊之後,會有很多東西需要像數據庫連接一樣嘲笑。

相信我,如果我可以重構這個,把if-else語句放在其他實用程序類中,並將它公開,我會。但事實證明,我無法重構代碼了。

+0

您可以向該方法添加代碼嗎? – Grasshopper

回答

1

我不認爲這是可能停止後,如果使用Mockito。你如何對mockito說,你想停止哪一點?

但是,你可以嘗試一個骯髒的解決方案 - 模擬一些方法調用,如果拋出一個異常,然後在你的測試方法剛剛抓住它成功。它會停止執行方法,並且不必模擬所有數據庫的內容。

+0

我認爲這將是一個骯髒的解決方案,但我想這會比嘲笑其餘的更好。 :/ – mpmp

0

不,我無法想象Mockito有可能在方法的早期點返回。 Mockito需要從堆棧中彈出值並更改控制流。您如何在代碼中指定要執行的部分?

你可以做的是嘲笑該方法,以便它執行第一條語句。但是,在這種情況下,您將針對模擬代碼進行測試。此外,你會引入一個代碼克隆(可能會與原始代碼不同步)。

0

您可以將第二部分提取到另一個方法,可能是使用包可見性,然後用doNothing()嘲弄該方法。

但是,我相信一旦你在這一點上,你應該重新考慮設計。

+0

是的,我不能改變代碼只是爲了更好的單元測試。商業規則。 – mpmp

相關問題