Informationen zur Verwendung von JUnit. JUnit ist eine ältere Version, da sie zur Verbreitung von Testcode am Arbeitsplatz geschrieben wurde.
Ich denke nicht, dass es effektiv sein wird, sobald ich anfange, den Testcode zu schreiben, aber ich hoffe, ihn nach und nach zu verbessern. Wenn ich den Testcode schreibe, denke ich, dass die Geschichte als "Manpower ..." oder "Speed ..." herauskommt, aber es dauert einige Zeit, bis ich mich daran gewöhnt habe, und wenn ich tatsächlich anfange, ihn zu schreiben, werde ich zurückkehren. Ich denke, dass es insgesamt viele gute Dinge gibt, weil es einfach ist, die Qualität zu verbessern, weil sie gegen meinen eigenen Code getestet wird.
Es gibt verschiedene Artikel über die Nützlichkeit des Testcodes. Schauen Sie also bitte dort nach.
Die Geschichte der Einführung von Tests in gesetzlosen Gebieten, in denen es keine Tests gab, und der Erhöhung der Entwicklungsgeschwindigkeit um das 1,7-fache Wie man technische Schulden bekämpft
Ich würde diesen Bereich gerne auf verschiedene Arten diskutieren, aber ich persönlich habe bisher nicht 90% oder mehr der Abdeckung angestrebt, daher werde ich es mir vorerst zur Gewohnheit machen und mich auf die zukünftige Rahmenmigration vorbereiten. Ich denke.
Das möchte ich in naher Zukunft tun.
Automatischer Test mit CI Ich möchte einen Testcode schreiben und überprüfen, nicht das Ende (Verhinderung der Entfettung)
Visualisierung der Abdeckungsrate Ich möchte die Bemühungen des Teams visualisieren und die Motivation bewahren
Überprüfung des Entwicklungssystems (Zweck der Überprüfung usw.) Wenn Sie Testcode schreiben, ändert sich der Zweck der Codeüberprüfung natürlich, daher möchte ich ihn überprüfen. Darüber hinaus kann es erforderlich sein, die Rollen mit dem QS-Team zu teilen.
Um Ihnen eine ungefähre Vorstellung vom Test zu geben, finden Sie hier ein einfaches Testbeispiel.
Produktionscode
public class HelloJunit {
public String sayHello() {
return "Hello";
}
}
Testcode
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import org.junit.Test;
public class HelloJunitTest {
@Test
sag public void Hallo() {
HelloJunit helloJunit = new HelloJunit();
assertThat(helloJunit.sayHello(), is("Hello"));
}
}
Legen Sie für den Namen der Testklasse den Namen fest, der durch Hinzufügen von Test zum Klassennamen des zu testenden Produktionscodes erhalten wird. Dadurch werden die zu testende Klasse und der Testcode als Testpaar erkannt.
Erstellen Sie eine Testmethode. Erstellen Sie zum Testen nach Möglichkeit eine Methode pro Fall. (Erstellen Sie nicht mehrere Tests mit derselben Methode.) Stellen Sie den Methodennamen außerdem auf Japanisch ein, damit der Inhalt des Testfalls leicht verständlich wird.
Durch Hinzufügen der Annotation @ Test zur Methode wird sie bei der Ausführung des Tests als Testzielmethode ausgeführt.
assertThat / is
Verwenden Sie assertThat
, um Werte zu vergleichen.
Die Verwendung von assertThat ist assertThat (erwarteter Wert, Matcher-Methode (gemessener Wert));
.
Die "is" -Methode führt einen Vergleich unter Verwendung der "Gleichheit" des Zielobjekts durch. Dieses Mal werden die "Hallo" -Strings verglichen und sind wahr, sodass der Test erfolgreich ist.
Wenn die Grafik rechts grün ist, sind Sie erfolgreich. Überprüfen Sie für Details die Ausführung, den Fehler und den Fehler auf der linken Seite.
Wenn der Test fehlschlägt, werden die Details des Fehlers im Protokoll ausgegeben. (Die Grafik rechts wird rot) Ein konkretes Vergleichsergebnis (Wert) wird in der Fehlerverfolgung angezeigt, daher muss es korrigiert werden, während auf dieses Bezug genommen wird.
Test Dies ist eine Anmerkung, die JUnit als Testmethode erkennt. Wenn diese Anmerkung angehängt ist, wird sie getestet. Die Methode muss "public void" sein.
Testanmerkung
@Test
sag public void Hallo() {
helloJunit = new HelloJunit();
assertThat(helloJunit.sayHello(), is("Hello"));
}
Before Methoden mit dieser Anmerkung werden ausgeführt, bevor der Test ausgeführt wird. Es wird verwendet, um eine allgemeine Verarbeitung durchzuführen.
Im folgenden Beispiel ist der Prozess zum Instanziieren der üblicherweise verwendeten Testzielklasse enthalten.
Vor der Annotation
@Before
public void setUp() {
helloJunit = new HelloJunit();
}
After Die Methode mit dieser Anmerkung wird zuletzt ausgeführt, nachdem alle Tests durchgeführt wurden. Es gibt eine Verwendungsmethode wie das Zuweisen einer externen Ressource zu Before und das Freigeben mit After.
Nach der Anmerkung
@Before
public void setUp() {
helloJunit = new HelloJunit();
File file = new File(FILE_PATH);
try {
filereader = new FileReader(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
@After
public void termDown() {
try {
filereader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Ignore Methoden mit dieser Annotation werden auch mit der Test-Annotation übersprungen. Es wird verwendet, wenn Sie aus irgendeinem Grund nicht vorübergehend testen möchten.
@Ignore
@Test
sag public void Hallo() {
helloJunit = new HelloJunit();
assertThat(helloJunit.sayHello(), is("Hello"));
}
Matcher API
is Es wird mit der Equals-Methode verglichen. Wenn Sie einen primitiven Typ festlegen, wird dieser in eine Wrapper-Klasse geändert und mit gleich verglichen.
is
@Test
Versuchen Sie öffentliche Leere ist() {
assertThat("Hello", is("Hello"));
assertThat(1, is(1));
}
not
not ist ein Test, um sicherzustellen, dass das Ergebnis des Vergleichs falsch ist.
Sie können assertThat (" Hallo ", nicht (" bye "));
verwenden, aber es ist besser zu verwendenist (nicht (~))
, um auf Englisch korrekt zu sein.
not
@Test
Versuchen Sie öffentliche Leere nicht() {
assertThat("Hello", is(not("bye")));
}
null value
Stellen Sie sicher, dass es Null ist.
Umgekehrt gibt es auch notNullValue
.
nullValue
@Test
versuchen Sie public void nullValue() {
assertThat(null, nullValue());
}
instanceOf(isA) Stellen Sie sicher, dass die Typen gleich sind.
instanceOf
@Test
Versuchen Sie es mit public void instanceOf() {
assertThat("Hello", instanceOf(String.class));
}
sameInstance Stellen Sie sicher, dass es sich um dieselbe Instanz handelt.
sameInstance
@Test
Versuchen Sie es mit public void sameInstance() {
assertThat("Hello", sameInstance("Hello"));
}
allOf Wenn alle Matcher in allOf wahr sind, ist dies erfolgreich.
allOf
@Test
Versuchen Sie public void allOf() {
assertThat("Hello", allOf(not("bye"),sameInstance("Hello")));
}
Wenn die Version von JUnit etwas höher ist, gibt es nützliche wie "hasItem", "hasItems" und "StartsWith", aber ... Weitere Informationen finden Sie unter hier.
Auf diese Weise können Sie testen, ob eine Ausnahme ausgegeben wird. Es gibt zwei Möglichkeiten zum Testen.
Unten finden Sie ein Beispiel für einen Produktionscode.
Produktionscode
public class HelloJunit {
public void throwException() {
throw new IllegalArgumentException("Ungültiges Argument");
}
}
Sie können testen, indem Sie in der Testanmerkung "erwartet" verwenden und die Klasse angeben, in der die Ausnahme auftritt.
Überprüfen Sie mit Test Annotation
@Test(expected = IllegalArgumentException.class)
Überprüfen Sie die öffentliche Leere Ausnahme mit Testanmerkung() {
helloJunit.throwException();
}
Sie können den zu testenden Code mit "try catch" vergleichen. Mit dieser Methode ist es möglich, die Nachricht zu überprüfen, wenn eine Ausnahme auftritt.
fangen und überprüfen
@Test
Überprüfen Sie die öffentliche Leere Ausnahme mit catch() {
try {
helloJunit.throwException();
} catch (IllegalArgumentException expected) {
assertThat(expected.getMessage(), is("Ungültiges Argument"));
}
}
Andere Qiita-Artikel, die gut aussehen [Hinweise zur Verwendung der in Hamcrest Matchers definierten Methoden](https://qiita.com/opengl-8080/items/e57dab6e1fa5940850a3#isin--Überprüfen Sie, ob es mit dem im Array oder in der Auflistung angegebenen Element übereinstimmt Zu)
Recommended Posts