[JAVA] Da der Unit-Test des PJ, für den ich verantwortlich war, ein Höllenbild war, werde ich meinen eigenen Leitfaden veröffentlichen (?)

Einführung

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. __ __

Basic

Testfall

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
         */
    }

}

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

}

Informationen zu Namensregeln

--Der Name der Testklasse wird durch Hinzufügen von "Test" am Ende des zu testenden Klassennamens benannt.

Empfohlene Funktionen von JUnit 5

Teststrukturierung

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

}

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

}

Markieren

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

}

Durch Entwicklung im ersten Halbjahr 2020

Verweise

Recommended Posts

Da der Unit-Test des PJ, für den ich verantwortlich war, ein Höllenbild war, werde ich meinen eigenen Leitfaden veröffentlichen (?)
Wie ein Ingenieur für freie Künste in einem halben Jahr nach seinem Eintritt in das Unternehmen an Java Silver vorbeikam
Ich war verwirrt, weil es eine Aufteilung im Array gab
Die tägliche Berichtstabelle der Firma meiner Eltern wurde in eine Webanwendung umgewandelt. (Für Smartphones)
Da der Unit-Test des PJ, für den ich verantwortlich war, ein Höllenbild war, werde ich meinen eigenen Leitfaden veröffentlichen (?)
[Past POST] Ich werde einen Teil des Antwortprotokolls veröffentlichen, als ich Mentor von TECH :: CAMP war
Ein Super-Anfänger hat das Frühlings-Einführungsbuch fertiggestellt, daher werde ich es auf meine eigene Weise zusammenfassen
Ich war verwirrt, weil es eine Aufteilung im Array gab
Ich habe das automatische Tool zum Erstellen von Komponententests überprüft (Version Ende 2019).
Ich habe den Java-Test Level 2 bestanden und werde eine Notiz hinterlassen