我有一個帶有方法的服務類。此方法呼叫其他一些服務類的方法:
@Service
public class MyServiceClass {
private final OtherServiceClass otherServiceClass;
//constructor
....
public void myMethod(Object input) {
otherServiceClass.method1(input);
otherServiceClass.method2(input, input.getParameter());
otherServiceClass.method3();
}
}
由于這些服務方法是在 OtherServiceClass 中單獨測驗的,我應該為 myMethod 撰寫任何測驗嗎?如果是,如何?我在 Mockito 和 Spring boot 2.3.3 中使用 Junit5
uj5u.com熱心網友回復:
您可以使用ArgumentCaptor(參見檔案)來驗證您是否將正確的引數傳遞給OtherServiceClass.
uj5u.com熱心網友回復:
是的,您仍然應該測驗這些類。事實上,在這些方法中你仍然有一些邏輯流是有目的的。你要確保IEotherServiceClass.method3()是在這個服務中執行的。如果沒有額外的測驗,有人可以在未來洗掉這個呼叫,并且不會得到任何錯誤的線索。
為此,您可以使用呼叫的庫BDDMockito來幫助測驗行為而不是回傳值。您可以查看這篇文章,了解如何測驗服務中方法的執行情況。
此外,您應該始終測驗涉及輸入引數的場景。IE 詢問自己是否允許將空值作為輸入值,然后相應地準備測驗。目前,只要有人將 null 作為輸入,您就會以 NPE 結束。
uj5u.com熱心網友回復:
我認為您應該測驗 MyServiceClass.myMethod。正如您自己已經說過的,被呼叫的方法是單獨測驗的,因此您不必再次詳細測驗它們。
問題是所謂的 Service 方法是做什么的,以及如何測驗結果。如果在沒有模擬的情況下很難測驗它,那么您可以選擇模擬它們并測驗它們是否被呼叫,它們是否以正確的順序被呼叫以及它們是否被正確的引數呼叫。這樣做的風險是,您以后可能會更改代碼但具有相同的功能結果但測驗失敗。理想情況下,您不想測驗代碼是否是現在的代碼,而是代碼是否會導致正確的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/330642.html
