Über die Änderungen in Mockito 2. Der Inhalt ist für Mockito 1-Benutzer.
Freigaberichtlinie geändert wurde am 2017/04 hinzugefügt. Früher wurde es mit jedem Fix veröffentlicht, aber jetzt werden nur die wichtigen Versionen (im Grunde aktualisierte Haupt- / Nebenversionen) vom JCenter / Maven Central Repository bereitgestellt.
Die wichtigsten Änderungen und zusätzlichen Funktionen werden nachfolgend beschrieben. Weitere Informationen finden Sie unter Wiki, Versionshinweise /blob/release/2.x/doc/release-notes/official.md) und [Mockitos Javadoc](https://javadoc.io/page/org.mockito/mockito-core/latest/org/mockito/ Bitte überprüfen Sie Mockito.html # 0).
Mockito 1 erforderte Power Mock, aber ab Mockito 2 ist es möglich, diese zu verspotten, indem der Inline-Mock-Maker aktiviert wird. .. Kotlins Klasse, die schließlich standardmäßig angegeben wird, verwendet auch das kotlin-allopen-Plug-in. Sie können verspotten, ohne es zu benutzen.
Um diese Funktion zu aktivieren, bereiten Sie die folgenden MockMaker-Dateien im Testressourcenverzeichnis vor.
text:app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
mock-maker-inline
Alternativ können Sie das Mockito-Inline-Artefakt anstelle des Mockito-Kerns angeben.
build.gradle
dependencies {
//testCompile "org.mockito:mockito-core:+"
testCompile "org.mockito:mockito-inline:+"
}
Dieses Artefakt ist jedoch nur vorübergehend, bis die Funktion zur Standardeinstellung wird und möglicherweise in Zukunft entfernt wird.
Diese Funktion wird von einem Mock Maker namens InlineByteBuddyMockMaker bereitgestellt, jedoch für diese Klasse @ Incubating
.html) Kommentiert.
Die Annotation "@ Incubating" wird der neuen API hinzugefügt und zeigt an, dass wir Benutzerfeedback erwarten.
Bitte beachten Sie, dass sich die API je nach Feedback ändern kann (obwohl ich denke, dass dies selten der Fall ist).
Beachten Sie, dass das Verspotten statischer Methoden und Konstruktoren nicht unterstützt wird. Wenn Sie sie also verspotten möchten, benötigen Sie weiterhin PowerMock.
Früher war Dexmaker erforderlich, aber Mockito 2.6 bietet jetzt eine Bibliothek für Android-Geräte. Sie können Mockito auf Ihrem Android-Gerät verwenden, indem Sie mockito-android als Bibliothek des Bereichs androidTestCompile angeben.
build.gradle
dependencies {
androidTestCompile "org.mockito:mockito-android:+"
}
Mit mockito-android können Sie private Paketklassen verspotten, die mit Dexmaker nicht möglich waren.
Beachten Sie, dass Sie mit diesem Artefakt keine endgültigen Klassen / Methoden verspotten können. (Der oben erwähnte Inline-Mock-Maker ist auch nicht mit Android kompatibel.) Obwohl dies meine Arbeit ist, stellen wir eine Bibliothek namens DexOpener zur Verfügung, die das Verspotten der endgültigen Klassen / Methoden auf Android-Terminals realisiert. Bitte versuchen Sie es, wenn Sie möchten.
In Mockito 1 war ArgumentMatcher eine abstrakte Klasse. Nachdem Mockito 2 zu einer Schnittstelle vom Typ SAM geändert wurde, können Sie Lambda-Ausdrücke mit argThat (ArgumentMatcher) verwenden.
any ()
undany (Class)
sind jetzt deutlich getrennte Methoden.
any ()
stimmt mit jedem Argument überein, einschließlich null, aberany (Class)
stimmt nicht mit null überein.
Außerdem wurde die Klasse, in der diese Methoden definiert sind, von Matchers in ArgumentMatchers geändert.
AnyXxx () -Serien-Matcher wie "anyString ()" und "anyList ()" stimmen nicht mehr mit null überein.
Mockito 2 verwendet "any ()".
"Nullable (Class)" wurde als eine Methode hinzugefügt, die "isA (Class)" sehr ähnlich ist.
nullable (Class)
entspricht null oder einem Argument des angegebenen Typs, aberisA (Class)
stimmt nicht mit null überein.
Zum Beispiel, wenn die Zielklasse ist
@Foo
class Bar { ... }
Die Scheinklasse erhält auch "@ Foo".
Bar mock = mock(Bar.class);
assertTrue(mock.getClass().isAnnotationPresent(Foo.class));
Ab Mockito 2.3 wurde die Strictness-Klasse eingeführt.
--LENIENT (Mockito 1 Standard, am lockersten) --WARN (Mockito 2 Standard) --STRICT_STUBS (Mockito 3 ist die Standardeinstellung, die härteste)
Es gibt drei Modi: Sie können eine Ausnahme für die Verwendung des Mocks auslösen und eine Hinweisnachricht ausgeben.
Auch für MockitoJUnitRunner
--MockitoJUnitRunner.Silent (entspricht "LENIENT")
--MockitoJUnitRunner.Strict (entspricht WARN
, entspricht MockitoJUnitRunner)
--MockitoJUnitRunner.StrictStubs (entspricht STRICT_STUBS
)
Drei Klassen wurden hinzugefügt.
Ein Anwendungsbeispiel ist unten dargestellt.
public class MyTest {
@Rule
public MockitoRule rule = MockitoJUnit.rule().strictness(Strictness.STRICT_STUBS);
@Mock
Foo foo;
@Test
public void test() {
when(foo.bar()).thenReturn("test");
}
class Foo {
String bar() {
return "";
}
}
}
Die obige test ()
Methode verwendet nicht den in der when
-Klausel festgelegten Mock-Satz.
Wenn Sie diesen Test ausführen, wird eine UnnecessaryStubbingException ausgelöst.
Wenn Sie "STRICT_STUBS" im obigen Code in "WARN" ändern, tritt kein Fehler auf, aber der folgende Hinweis wird an die Konsole ausgegeben.
[MockitoHint] MyTest.test (see javadoc for MockitoHint):
[MockitoHint] 1. Unused -> at com.example.MyTest.test(MyTest.java:22)
Wenn Sie es in "LENIENT" ändern, tritt kein Fehler auf und es wird keine Nachricht ausgegeben.
Das Mockito-Team [dringend empfohlen], STRICT_STUBS (https://javadoc.io/page/org.mockito/mockito-core/latest/org/mockito/quality/Strictness.html#STRICT_STUBS) zu verwenden ) ist.
Bitte beachten Sie, dass die Strictness-Klasse mit "@ Incubating" versehen ist.
Ab Mockito 2.7 wird Mockito Session für Umgebungen bereitgestellt, in denen MockitoJUnitRunner / MockitoRule nicht verwendet werden kann. Wenn Sie "MockitoAnnotations # initMocks (Object)" verwenden, um das Modell zu generieren, können Sie es durch MockitoSession ersetzen.
Die Verwendung wird unten gezeigt.
private MockitoSession session;
@Before
public void setUp() {
session = Mockito.mockitoSession().initMocks(this).startMocking();
}
@After
public void tearDown() {
session.finishMocking();
}
Wenn Sie die oben genannten Schritte ausführen, wird die Überprüfung gemäß dem Modus der Strenge zum Zeitpunkt von "finishMocking ()" durchgeführt.
Verwenden Sie die Methode "Strenge (Strenge)", um die Strenge zu wechseln.
session = Mockito.mockitoSession()
.initMocks(this)
.strictness(Strictness.WARN)
.startMocking();
Die Standardeinstellung für Strictness ist "STRICT_STUBS". Dies ist ein strengerer Modus als "WARN" in MockitoJUnitRunner / MockitoRule.
Bitte beachten Sie, dass MockitoSession auch mit "@ Incubating" versehen ist.
das ist alles.
Recommended Posts