如果測試不依賴於MyClass
填充的情況下被傳遞到addToCart()
那麼你可以嘲笑它...
MyClass myClass = Mockito.mock(MyClass.class);
String x = "some x";
String y = "some y";
String y = "some z";
MyClassImpl sut = new MyClassImpl();
sut.addToCart(myClass, x, y, z);
// continue with test assertions ...
這將工作,只要你的addToCart()
使用不關心內容或行爲myClass
。
但是,如果您的測試用法addToCart()
對myClass
的內容或行爲有一些期望,那麼您必須傳遞一個實際的「MyClass」實例,以滿足這些期望。 「設置值更深的」非常耗時,而且,也許,你的測試只關心的MyClass
一些受限制的方面,那麼你可以使用的Mockito嘲笑那些有限的方面,例如:
MyClass myClass = Mockito.mock(MyClass.class);
Mockito.when(myClass.getX()).thenReturn("some test specific value");
Mockito.when(myClass.doX()).thenThrow(new RuntimeException("some test specific exception");
String x = "some x";
String y = "some y";
String y = "some z";
MyClassImpl sut = new MyClassImpl();
sut.addToCart(myClass, x, y, z);
// continue with test assertions ...
編輯1:基於在你的評論中「有一個空的檢查myclass對象myclass和myclass.getX()內的一個條件ddToCart()」 ......
X x = Mockito.mock(X.class);
Mockito.when(myClass.getX()).thenReturn(x);
......將確保在MyClass.getX()
空檢查中addToCart()
傳遞安全。而且,當然,因爲您創建了MyClass
的模擬實例並將其傳遞到addToCart()
,並且該實例顯然不爲空,所以傳遞給addToCart()
的myClass
實例上的任何空檢查都將安全通過。
它就像myClass.getX()一樣,getX()有三個變量,它們是類,這些類再次變得更深。 – Sawyer
我明白了,所以模仿'MyClass'可以幫助你,但是如果你需要在'MyClass'內嘲諷'X',然後在'X'內''Y',你可能很快就會發現創建一個** My **實例** MyClass '可能不那麼耗時,可能會產生更具可讀性的測試代碼。 – glytching
有一個空檢查的Myclass對象myclass和myclass.getX()內addToCart(),有沒有什麼辦法我可以Stubb重寫空檢查或使對象和值不爲空 – Sawyer