Kaip patikrinti, ar specifinis metodas nebuvo vadinamas naudojant „Mockito“?

Kaip patikrinti, ar metodas nesukelia objekto priklausomybės?

Pavyzdžiui:

 public interface Dependency { void someMethod(); } public class Foo { public bar(final Dependency d) { ... } } 

Naudojant foo testą:

 public class FooTest { @Test public void dependencyIsNotCalled() { final Foo foo = new Foo(...); final Dependency dependency = mock(Dependency.class); foo.bar(dependency); // verify here that someMethod was not called?? } } 
330
12 окт. nustatytas beluchinas 12 okt. 2012-10-12 18:44 '12, 18:44, 2012-10-12 18:44
@ 4 atsakymai

Dar svarbesnis:

 import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; // ... verify(dependency, never()).someMethod(); 

Šios funkcijos dokumentacija yra §4 „Tikslus skambučių skaičius / bent x / niekada“ ir never javadoc čia .

589
12 окт. atsakymas į Brice pateikiamas spalio 12 d. 2012-10-12 19:08 '12, 07:08 val. 2012-10-12 19:08

naudoti antrąjį „ Mockito.verify metodo argumentą, kaip:

verify(dependency, Mockito.times(0) ).someMethod()

75
12 окт. atsakymas pateikiamas beluchin 12 oct. 2012-10-12 18:44 '12, 18:44, 2012-10-12 18:44

Būdamas bendresnis šablonas, bandau naudoti „ @After bloką:

 @After public void after() { verifyNoMoreInteractions(<your mock1>, <your mock2>...); } 

Tada testas gali laisvai patikrinti tik tai, kas turėtų būti vadinama.

Be to, aš pastebėjau, kad dažnai užmiršau tikrinti „sąveikos trūkumą“, bet tik vėliau nustatė, kad viskas sukelia, o tai neturėtų būti.

Taigi, manau, kad šis modelis yra naudingas nustatant visus netikėtus skambučius, kurie nebuvo specialiai išbandyti.

9
03 марта '15 в 17:54 2015-03-03 17:54 atsakymas įteiktas p. Spoon 03 kovo 15 d. 17:54 2015-03-03 17:54

Tiek „ verifyNoMoreInteractions() tiek „ verifyZeroInteracions() viduje turi tą patį įgyvendinimą kaip:

 public static transient void verifyNoMoreInteractions(Object mocks[]) { MOCKITO_CORE.verifyNoMoreInteractions(mocks); } public static transient void verifyZeroInteractions(Object mocks[]) { MOCKITO_CORE.verifyNoMoreInteractions(mocks); } 

todėl mes galime naudoti bet kurį iš šių išdėstymo objektų ar maketų, kad patikrintume, ar metodai nebuvo vadinami naudojant išdėstymo objektus.

2
22 марта '16 в 15:57 2016-03-22 15:57 atsakymas pateikiamas Ujjwal kovo 22 d. 16 val. 15:57 2016-03-22 15:57

Kiti klausimai apie arba Užduoti klausimą