Hallo, ich bin Negero.
Ich wurde in der ersten Hälfte des Jahres 2020 einem Java-Entwicklungsprojekt zugewiesen, aber der von den Mitgliedern, einschließlich mir, erstellte UT-Code war hier __chaos.
Zum Beispiel -Test mit gemischtem JUnit4- und JUnit5-Code
Dieser PJ wird in der zweiten Hälfte weiterentwickelt, um zusätzliche Funktionen zu implementieren, aber ich denke, es ist nicht so gut wie es ist. Ich habe mich nach Rücksprache mit leitenden Angestellten für einen Unit-Test-Leitfaden entschieden (?).
In diesem Artikel werden wir den Leitfaden veröffentlichen.
Beachten Sie jedoch, dass es sich um einen Leitfaden für __chaotische Websites __ handelt, wie oben beschrieben.
Auch der Autor selbst ist mit Unit-Tests nicht vertraut. Wenn Sie Meinungen wie "Ich sollte das mehr tun!" Oder "Es ist falsch!" Haben, schreiben Sie sie bitte in die Kommentare!
Ich hoffe, dieser Artikel hilft denen, die sich fragen: "Wie soll ich mit dem Unit-Test fortfahren?"!
__ Das Folgende ist eine Beschreibung unter der Annahme von JUnit5. __ __
Add.java
//Getestete Klasse
public class Calc {
public int add(int a, int b) {
return a + b;
}
}
CalcTest.java
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
//Testklasse
class CalcTest {
@Test
Wenn Sie 2 und 3 an die void add-Methode übergeben, wird 5 zurückgegeben() {
//【Vorbereitungen】
Calc sut = new Calc();
int expected = 5;
//[Ausführung]
int actual = sut.add(2, 3);
//[Überprüfung]
assertEquals(expected, actual);
//[Nachbearbeitung]
/*
*Zerstören Sie eine Instanz, schließen Sie eine Datei usw.
*Schreiben Sie ggf. die Verarbeitung
*/
}
}
`assertEquals (erwarteter Wert, Inspektionsziel)`
auswertenassertTrue / False```,
assertNull / NotNull```,
`assertSame / NotSame```. Verwenden Sie sie daher bei Bedarf ordnungsgemäß.`assertThat (Inspektionsziel, Matcher-Funktion (erwarteter Wert))`
Die Funktionen asserThat und Matcher wurden jedoch in JUnit5 abgeschafft.Bookshelf.java
//Getestete Klasse
public class Bookshelf {
String[] books = new String[3];
public String addBook(int i, String title) {
books[i] = title;
return title;
}
public List<String> readBook(String str) throws IOException {
Path path = Paths.get(str);
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
return lines;
}
}
BookshelfTest.java
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import java.io.IOException;
//Testklasse
class BookshelfTest {
@Test
Das Aufrufen der addBook-Methode mit einem ungültigen Index von 3 oder mehr löst eine ArrayIndexOutOfBoundsException aus() {
//【Vorbereitungen】
Bookshelf sut = new Bookshelf();
//[Ausführung]
assertThrows(ArrayIndexOutOfBoundsException.class, () -> sut.addBook(3, "JavaTextBook"));
}
@Test
void Löst eine IOException aus, wenn die readBook-Methode mit einer nicht vorhandenen Datei aufgerufen wird() {
//【Vorbereitungen】
Bookshelf sut = new Bookshelf();
//[Ausführung]
assertThrows(IOException.class, () -> sut.readBook("hoge.txt"));
}
}
--Der Name der Testklasse wird durch Hinzufügen von "Test" am Ende des zu testenden Klassennamens benannt.
`assertEquals (0, actual);`
Der unmittelbare Wert ist leichter zu verstehen.@ @ BeforeEach``` und
@ AfterEach``` hinzufügen.BookshelfTest.java
import static org.junit.jupiter.api.Assertions.*;
import java.io.IOException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
class BookshelfTest {
@Nested
Klasse Sie können bis zu 3 Bücher im Bücherregal aufbewahren{
private Bookshelf sut;
private String expected1 = "JavaText";
private String expected2 = "PythonText";
private String expected3 = "RubyText";
@BeforeEach
void setUp() {
sut = new Bookshelf();
}
@Test
Sie können der void addBook-Methode ein Buch hinzufügen() {
//【Vorbereitungen】
//[Ausführung]
String actual = sut.addBook(0, expected1);
//[Überprüfung]
assertEquals(expected1, actual);
}
@Test
Der void addBook-Methode können zwei Bücher hinzugefügt werden() {
//【Vorbereitungen】
//[Ausführung]
String actual1 = sut.addBook(0, expected1);
String actual2 = sut.addBook(1, expected2);
//[Überprüfung]
assertEquals(expected1, actual1);
assertEquals(expected2, actual2);
}
@Test
Sie können der void addBook-Methode 3 Bücher hinzufügen() {
//【Vorbereitungen】
//[Ausführung]
String actual1 = sut.addBook(0, expected1);
String actual2 = sut.addBook(1, expected2);
String actual3 = sut.addBook(1, expected3);
//[Überprüfung]
assertEquals(expected1, actual1);
assertEquals(expected2, actual2);
assertEquals(expected3, actual3);
}
}
@Nested
Klasse Abnormaler Test{
private Bookshelf sut;
@BeforeEach
void setUp() {
sut = new Bookshelf();
}
@Test
Das Aufrufen der addBook-Methode mit einem ungültigen Index von 3 oder mehr löst eine ArrayIndexOutOfBoundsException aus() {
//【Vorbereitungen】
Bookshelf sut = new Bookshelf();
//[Ausführung]
assertThrows(ArrayIndexOutOfBoundsException.class, () -> sut.addBook(3, "JavaTextBook"));
}
@Test
void Löst eine IOException aus, wenn die readBook-Methode mit einer nicht vorhandenen Datei aufgerufen wird() {
//【Vorbereitungen】
Bookshelf sut = new Bookshelf();
//[Ausführung]
assertThrows(IOException.class, () -> sut.readBook("hoge.txt"));
}
}
}
`@ ParameterizedTest``` anstelle von
@ Test```BookshelfTest.java
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
class BookshelfTest {
@ParameterizedTest
@CsvSource({
"0, JavaText",
"1, PythonText",
"2, RubyText"
})
3 Bücherregal kann im leeren Bücherregal aufbewahrt werden(int index, String title) {
Bookshelf sut = new Bookshelf();
assertEquals(title, sut.addBook(index, title));
}
}
BookshelfTest.java
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
class BookshelfTest {
@Test
Sie können der void addBook-Methode ein Buch hinzufügen() {
//【Vorbereitungen】
Bookshelf sut = new Bookshelf();
String expected1 = "JavaText";
//[Ausführung]
String actual = sut.addBook(0, expected1);
//[Überprüfung]
assertEquals(expected1, actual);
}
@Tag("Anormales System")
@Test
Das Aufrufen der addBook-Methode mit einem ungültigen Index von 3 oder mehr löst eine ArrayIndexOutOfBoundsException aus() {
//【Vorbereitungen】
Bookshelf sut = new Bookshelf();
//[Ausführung]
assertThrows(ArrayIndexOutOfBoundsException.class, () -> sut.addBook(3, "JavaTextBook"));
}
}
Recommended Posts