您能否介紹一下mockito方法驗證的任務?文檔說,這個方法檢查方法是否被調用。但是,如果它真的有用,你能舉個例子嗎?通常在測試方法中,我們調用一個方法,然後檢查,我們現在調用它了嗎?聽起來怪怪的。Mockito,方法驗證任務
回答
爲了簡化...假設您正在測試方法A與某些參數。什麼方法A做的是調用方法B,C和D。
With Mockito.verify您可以測試方法B,C,D真的被調用。這甚至讓你可以指定更復雜的測試,如:
- ATLEAST(1)
- atMost(10)
方法時您正在測試的行爲真的可以有用根據您調用的參數有所不同。
我沒有正確理解你, 我有方法: public void method1(){ method2(); () } public void method2方法1(); verify(mResource).method2(); - 我得到綠色測試線?但我有紅色。它說我: 通緝但未調用: mResource.method2(); 我在做什麼錯誤的方式? –
這種類型的檢查通常只是爲了確保使用指定參數使用特定對象。假設您正在測試執行某些操作的業務服務,並且在此過程中還將某種審計線索存儲在數據庫中。
在數據庫中存儲這種信息已經在其他地方(單獨的單元測試或某種外部庫被使用)測試過,因此您不需要檢查審計數據是否正確存儲。爲了你的測試用例,這個方法被調用的信息就足夠了。這就是'驗證'方法的用例。
通常在測試方法中,我們調用一個方法,然後...檢查,我們現在調用它了嗎?聽起來怪怪的。
您不驗證您是否調用了測試方法。你驗證了無論測試結果如何,都調用了一些依賴項(你已經用模擬代替了)。
因此,例如,在測試密碼檢查器方法時,您想斷言除了拒絕不正確的密碼外,還會調用一些審計後端系統來註冊失敗的登錄嘗試。您的模擬對象將代表該後端系統,您可以使用它來驗證它最終被調用(還有適當的參數)。
它是這樣的:
public class UnderTest {
private Foo foo;
public UnderTest(Foo foo) { this.foo = foo };
public void bar() { foo.foo(); }
}
現在假設您提供嘲笑 foo的實例UnderTest。並且你想要當然foo.foo()
被調用bar()
被調用時。
然後您使用verify()確保發生預期呼叫。
換句話說:測試需要驗證方法的行爲。理想情況下,他們通過對由測試方法返回的值聲明做到這一點。但並非所有的方法都會返回一些東然後你可能驗證你的代碼至少檢查某些期望的調用所擁有/傳遞給被測試的類的對象確實發生過。然後你需要verify()!
讓我們假設你有一些DAO類,它通過普通的JDBC與數據庫交互。您有一些方法可以在數據庫中寫入數據,並希望對其進行單元測試。要這樣做,你可能會模仿Connection
類。在寫入數據庫時,您可能會在此模擬上調用commit
方法,但返回類型爲void
,因此您無法保證在測試期間調用該方法。要解決這些問題,您可以使用verify
。 希望它有幫助!
是否表示驗證檢查成功\t 完成方法? –
@MariaKarpikova,它只是檢查該方法被調用。 –
方法返回東西或void
。
在單元測試中,作爲一個方法返回的東西,通常你想用特定的值來模擬它的結果,並檢查被測方法的流程是否繼續。
它是有道理的,彷彿一個模擬方法返回的東西,通常你需要它的結果:無論是在測試方法的下一個語句或由被測試的方法返回的結果。
由於方法什麼也沒有返回(void
),事情是不一樣的:你不能嘲笑它的結果。
但是你可以斷言這個方法是被調用的並且具有預期的參數。
例如想象一個PrinterService
類打印文檔
public class PrintService{
...
public void printMessage(String message){
os.print(message);
}
}
而且假設你需要另一個類的單元測試時將其隔離。
下面的方法進行測試:
public class PrintClient{
...
PrintService printService;
public void print(String message, PrinterParameters printerParameters...){
... // do some tasks
...
printService.print(message);
...
}
}
PrintService.print()
回報什麼。
因此,在PrintClient
的單元測試中,您不想模擬PrintService.print()
的結果,因爲它沒有。
您只需檢查是否使用傳遞給 的message
參數調用PrintClient
經過測試的方法。
@RunWith(MockitoJUnitRunner.class)
public class PrintClientTest{
@Mock
PrintService printServiceMock;
...
@Test
pubic void print(){
...
String message = "my message";
PrintClient printClient = new PrintClient(printServiceMock);
printClient.print(message, ...);
//
Mockito.verify(printServiceMock).print(message);
...
}
}
- 1. Mockito驗證方法調用
- 2. Mockito。驗證方法參數
- 3. Mockito驗證方法調用一次
- 4. PowerMock,mockito,驗證靜態方法
- 5. 用Mockito驗證的正確方法
- 6. 的Mockito - 驗證遞歸方法
- 7. 驗證的Mockito方法無法檢測方法調用
- 8. Mockito爲了驗證任何匹配器
- 9. Mockito - 驗證存根
- 10. mockito模擬驗證
- 11. 無法用eclipse中的mockito驗證方法調用
- 12. Mockito驗證已驗證的調用
- 13. 如何驗證一個方法被調用兩次與mockito驗證()
- 14. Mockito驗證:在verify()期間比在模擬方法調用期間驗證
- 15. Mockito:驗證布爾方法(或其他類型)
- 16. Mockito測試:驗證靜態方法被稱爲內部片段
- 17. Mockito。驗證方法參數去是paticular類
- 18. Mockito:使用函數參數調用驗證方法
- 19. 我們什麼時候需要使用Mockito的驗證方法?
- 20. Mockito,如何驗證上次調用方法的參數
- 21. Mockito - 根據另一個對象狀態驗證方法調用
- 22. 的Mockito:驗證所捕獲的對象的方法被調用
- 23. 使用Mockito驗證從另一個類的方法被稱爲
- 24. 擴展Mockito驗證Kotlin無法正常工作(以「kotlin方式」)
- 25. Mockito驗證方法沒有給出一致的結果
- 26. 如何驗證一個void方法的Mockito
- 27. 的Mockito檢查構造函數參數」驗證方法
- 28. Mockito驗證不失敗
- 29. 驗證任務gradle這個
- 30. 驗證gradle任務圖
只是爲了記錄:有時候新手會忘記接受答案。所以 - 考慮在某個時候接受其中一個答案;-) – GhostCat
我不會忘記......我不知道正確的答案)))所以,我不能在將來desinform某人 –
你消化輸入,然後你考慮哪些讓你理解了這個問題。你有很好的投入,不應該從那裏挑選一些東西。 – GhostCat