Bei der Verwendung von Mockito wurde ich immer gegoogelt, wie man sich in diesem Fall verspottet, aber ich habe beschlossen, es zusammenzufassen, weil es ineffizient ist. Ich möchte wirklich JMockit verwenden, aber da schwarze Magie verboten ist, verwende ich Mockito.
Wir konnten noch nicht auf das 2. System umsteigen, daher ist Mockito1x eine Voraussetzung. Mockito 1.10.19 JUnit 4.11 Java 1.8.0_151
Eine Sache, die Sie bei Mockito beachten sollten, ist, dass die Verspottungsmethode unterschiedlich ist, je nachdem, ob der Rückgabewert der Methode ungültig ist oder nicht. Auf dieser Grundlage haben wir es in die folgenden sechs Kategorien eingeteilt.
No | Rückgabetyp der Scheinzielmethode | Mock Range | Scheinbetrieb |
---|---|---|---|
1 | Anders als nichtig | Das ganze | Gibt den angegebenen Rückgabewert zurück |
2 | Anders als nichtig | Das ganze | Eine Ausnahme auslösen |
3 | void | Das ganze | Eine Ausnahme auslösen |
4 | Anders als nichtig | Nur einige Methoden | Gibt den angegebenen Rückgabewert zurück |
5 | Anders als nichtig | Nur einige Methoden | Eine Ausnahme auslösen |
6 | void | Nur einige Methoden | Eine Ausnahme auslösen |
Übrigens liegt der Fall, in dem private Methode, statische Methode und abhängiges Objekt von new generiert werden, im Bereich von PowerMock, daher werde ich einen weiteren Artikel schreiben. → Ich habe es geschrieben. Wie man jeden Fall mit PowerMock + Mockito1x verspottet https://qiita.com/taka_22/items/27ea1fbf9c305ba83dcc
No.1 /**
Öffentliche Methode, Rückgabetyp ist Mock All außer void, Rückgabewert */ @Test public void test001() { List mockedList = mock(List.class);
when(mockedList.get(0)).thenReturn("aaa");
assertThat((String)mockedList.get(0), is("aaa"));
assertNull(mockedList.get(1));
}
No.2 /**
Öffentliche Methode, Rückgabetyp ist Mock All außer Void, Throw Exception */ @Test public void test002() { List mockedList = mock(List.class);
when(mockedList.get(0)).thenThrow(new RuntimeException("aaa"));
try {
mockedList.get(0);
fail();
} catch(RuntimeException e) {
assertThat(e.getMessage(), is("aaa"));
}
assertNull(mockedList.get(1));
}
No.3 Der Punkt ist, dass doThrow vorne kommt.
/**
öffentliche Methode, Rückgabetyp ist ungültig, alle verspotten, Ausnahme auslösen */ @Test public void test003() { List mockedList = mock(List.class);
doThrow(new RuntimeException("aaa")).when(mockedList).clear();
try {
mockedList.clear();
fail();
} catch(RuntimeException e) {
assertThat(e.getMessage(), is("aaa"));
}
assertNull(mockedList.get(0));
}
No.4 Wenn Sie nur einen Teil davon verspotten möchten, verwenden Sie Spion anstelle von Verspotten. Es wird verwendet, wenn Sie das Verhalten einer Methode ändern möchten, die kein Testziel ist und von einer Testzielmethode aufgerufen wird.
/**
// Ich habe dem realen Objekt "bbb" hinzugefügt spiedList.add("bbb"); // Spy now get (0) gibt "aaa" zurück when(spiedList.get(0)).thenReturn("aaa");
// Das Ergebnis ist "aaa" assertThat((String)spiedList.get(0), is("aaa")); // Andere Methoden geben echte Ergebnisse zurück assertThat(spiedList.size(), is(1)); }
No.5 /**
// Ich habe dem realen Objekt "bbb" hinzugefügt spiedList.add("bbb"); // Spy now get (0) löst eine RuntimeException aus when(spiedList.get(0)).thenThrow(new RuntimeException("aaa"));
try {
spiedList.get(0);
fail();
} catch(Exception e) {
assertThat(e.getMessage(), is("aaa"));
}
// Andere Methoden geben echte Ergebnisse zurück assertThat(spiedList.size(), is(1)); }
No.6 /**
// Füge "bbb" zum realen Objekt hinzu spiedList.add("bbb"); // Eine RuntimeException auslösen, wenn clear aufgerufen wird doThrow(new RuntimeException("aaa")).when(spiedList).clear();
try {
spiedList.clear();
fail();
} catch(RuntimeException e) {
assertThat(e.getMessage(), is("aaa"));
}
// Andere Methoden geben echte Ergebnisse zurück assertThat(spiedList.size(), is(1)); assertThat((String)spiedList.get(0), is("bbb")); }
Mockito http://site.mockito.org/
https://github.com/taka2/mockito-sample
https://qiita.com/taka_22/items/27ea1fbf9c305ba83dcc
Recommended Posts