[JAVA] Verwendung von JUnit (Anfänger)

Informationen zur Verwendung von JUnit. JUnit ist eine ältere Version, da sie zur Verbreitung von Testcode am Arbeitsplatz geschrieben wurde.

Einführung

Warum möchten Sie die Gewohnheit einführen, Tests zu schreiben?

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.

Referenz

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

Wie weit zielen Sie dann?

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.

Ausführungsumgebung

Einfaches Testmuster

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"));
	}
}

Erklärung des Testcodes

Name der Klasse

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.

Testmethode

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.

Ausführungsergebnis

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.

スクリーンショット 2019-05-19 15.14.26.png

Wenn es fehlschlägt

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.

スクリーンショット 2019-05-19 15.16.32.png

Anmerkung

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")));
}

Andere

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 Ausnahmen prüfen

Auf diese Weise können Sie testen, ob eine Ausnahme ausgegeben wird. Es gibt zwei Möglichkeiten zum Testen.

  1. Legen Sie das Ziel in der Testanmerkung fest
  2. Versuchen Sie zu fangen und zu überprüfen

Unten finden Sie ein Beispiel für einen Produktionscode.

Produktionscode


public class HelloJunit {
	public void throwException() {
		throw new IllegalArgumentException("Ungültiges Argument");
	}
}

Überprüfen Sie mit Test Annotation

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();
}

Fangen und prüfen

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"));
	}
}

Referenzmaterial

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

Verwendung von JUnit (Anfänger)
[Erstellen] Verwendung von JUnit
Verwendung von Map
Wie benutzt man rbenv?
Verwendung mit_option
Verwendung von fields_for
Verwendung von java.util.logging
Verwendung der Karte
Verwendung von collection_select
Wie benutzt man Twitter4J
Wie benutzt man active_hash! !!
Verwendung von MapStruct
Verwendung von TreeSet
[Verwendung des Etiketts]
Wie man Identität benutzt
Wie man Hash benutzt
Verwendung von Dozer.mapper
Wie benutzt man Gradle?
Verwendung von org.immutables
Verwendung von java.util.stream.Collector
Verwendung von VisualVM
Verwendung von Map
Hinweise zur Verwendung der einzelnen JUnit-Regeln
Verwendung der Ketten-API
[Java] Verwendung von Map
Verwendung der Warteschlange mit Priorität
[Rails] Verwendung von Enum
Verwendung von Java Optional
Verwendung von Ruby return
[Rails] Verwendung von Enum
Verwendung von @Builder (Lombok)
Verwendung der Java-Klasse
Wie man Big Decimal benutzt
[Java] Verwendung von removeAll ()
Verwendung von String [] args
Verwendung von Rails Join
Verwendung von Java Map
Ruby: Wie man Cookies benutzt
Verwendung von abhängigen :: zerstören
Wie schreibe ich Junit 5 organisiert
Verwendung von Eclipse Debug_Shell
Verwendung von Apache POI
[Rails] Verwendung der Validierung
Verwendung von Java-Variablen
[Rails] So verwenden Sie authenticate_user!
Verwendung von GC Viewer
Wie man Lombok jetzt benutzt
[Schienen] Verwendung von Scope
[Anfänger] Entdecken Sie das N + 1-Problem! Wie benutzt man Bullet?
[Anfänger] Verwendung des Geräts Ändern Sie die Einstellungen ab Einführung