Mockito in Android Tests verwenden
Der Blog Eintrag klingt unsinnig. Jedem ist klar wie man eine
Dependeny einfügt und wie man ein Test schreibt,
aber wenn man Mockito innerhalb von Android verwenden will funktioniert das nicht Out-Of-The-Box.
Da mich das ne Stunde gekostet hat, schreib ich mal einfach auf wie das geht.
Ich gehe der Einfachheit halber einfach davon aus dass Android Studio verwendet wird.
Testklasse:
... public class YourTest extends TestCase { @Override protected void setUp() throws Exception { super.setUp(); } protected void testSomething() throws Exception { TextView simpleExampleTestee = Mockito.mock(TextView.class); simpleExampleTestee.setText("test"); Mockito.verify(simpleExampleTestee, Moskito.once()).setText(Matchers.eq("test")); } } ...Schritt1:
Mockito wie gewohnt als dependency in build.gradle einfügen
... androidTest 'org.mockito:mockito-core:1.9.5' ...
Als Ergebnis wird bei der Ausführung etwas in folgender Art passieren:
Caused by: java.lang.VerifyError: org/mockito/cglib/core/ReflectUtils at org.mockito.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167) at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) ...
Schritt 2:
Mockito dexmaker einfügen, also hat man dann etwas derartiges:
... androidTestCompile "org.mockito:mockito-core:1.9.5" androidTestCompile "com.google.dexmaker:dexmaker:1.0" androidTestCompile "com.google.dexmaker:dexmaker-mockito:1.0" ...Das sollte schon funktionieren auf einem echten Handy, in der CI (Emulator) kam es dann aber zu folgendem Fehler
java.lang.IllegalArgumentException: dexcache == null (and no default could be found; consider setting the 'dexmaker.dexcache' system property)
Schritt 3:
Dexmaker cache setzen, dann sollte es nun auch auf emulatoren laufen, also zum Beispiel in folgender Art
... public class YourTest extends TestCase { @Override protected void setUp() throws Exception { super.setUp(); System.setProperty("dexmaker.dexcache", getContext().getCacheDir().toString()); } protected void testSomething() throws Exception { TextView simpleExampleTestee = Mockito.mock(TextView.class); simpleExampleTestee.setText("test"); Mockito.verify(simpleExampleTestee, Moskito.once()).setText(Matchers.eq("test")); } } ...
Lese mehr:
Technisches agiles Vorgehen Motivation von Mitarbeitern Firmen führen Checklisten Anderes