commit d672b9bf32c633f03fb7f1e23f871e3328721ab2 Author: D.Bykov Date: Mon Jan 10 11:22:40 2022 +0100 - diff --git a/.idea/TriangleChecker.iml b/.idea/TriangleChecker.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/TriangleChecker.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/jars.xml b/.idea/libraries/jars.xml new file mode 100644 index 0000000..555bc6d --- /dev/null +++ b/.idea/libraries/jars.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..abf7648 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..bdf963f --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..bdbafb1 --- /dev/null +++ b/README.md @@ -0,0 +1,81 @@ +# Programmieren 3 + +## Assignment "TDD Einführung" + +### Ausgangssituation + +#### Test Driven Development (TDD) + +Bei TDD gilt die Regel: Produktivcode darf erst geschrieben werden, wenn +ein Test vorliegt, der scheitert. Und auch dann soll nur gerade so +viel Code geschrieben werden, um den Testfall (und alle anderen Tests) +erfolgreich ausführen zu können. + +#### Struktur des Assignments + +Das Assignment besteht aus zwei Java-Klassen: + +- TriangleChecker enthält den Produktivcode +- TriangleCheckerTest enthält die Tests + +Mit Hilfe von TDD soll insbesondere die Methode + + +checkTriangle(float a, float b, float c) + + +entwickelt werden. Diese Methode hat die Aufgabe, anhand +der übergebenen drei Seitenlängen zu entscheiden, ob es +sich um ein normales, ein gleichschenkliges, ein +gleichseitiges oder gar kein Dreieck handelt. + + +### Aufgabenstellung + +#### Normales Dreieck + +Mit dem Assignment kommt ein erster Testfall, +der überprüft, ob ein normales Dreieck richtig erkannt +wird. Sorgen Sie dafür, dass der Testfall nicht mehr scheitert. +Achten Sie darauf, dass Sie nicht mehr implementieren, als +zur Lösung dieses Testfalls notwendig ist. Weitere +Fälle müssen noch nicht erkannt werden. + +#### Gleichseitiges Dreieck + +Erstellen Sie nun einen Testfall, der überprüft, +ob ein gleichseitiges Dreieck erkannt wird. +Da Sie bisher nur normale Dreiecke identifizieren, +wird dieser Testfall zunächst scheitern. + +Nehmen Sie nun minimale Änderungen am Produktivcode vor, +so dass beide Testfälle fehlerfrei ausgeführt werden. + +#### Kein Dreieck + +Es gibt Zahlenkombinationen, die nicht zu einem +Dreieck passen (z.B. negative Zahlen oder +eine überlange Seite, so dass die anderen beiden +Seiten das Dreieck nicht abschließen können). + +Erstellen Sie jeweils eigene Testfälle für diese +Art von Zahlenkombinationen. Das sind mindestens +6 weitere Testfälle (warum?). + +Korrigieren Sie anschließend den Produktivcode, +so dass alle Tests durchlaufen. + +#### Gleichschenkliges Dreieck + +Schließlich sollen noch gleichschenklige Dreiecke +erkannt werden. Dabei soll die +Methode stets die genaueste Information +zurückliefern, d.h. +- bei einem gleichseitigen Dreieck *EQUILATERAL*, auch wenn + ein gleichseitiges Dreieck natürlich auch gleichschenklig + ist. +- bei einem gleichschenkligem Dreieck *ISOSCELES*, auch wenn + ein gleichschenkliges Dreieck natürlich auch ein + normales Dreieck ist. + +Verwenden Sie auch hier die TDD-Vorgehensweise. diff --git a/TriangleCheckerAssignment.iml b/TriangleCheckerAssignment.iml new file mode 100644 index 0000000..506243b --- /dev/null +++ b/TriangleCheckerAssignment.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/TriangleCheckerTDD.iml b/TriangleCheckerTDD.iml new file mode 100644 index 0000000..506243b --- /dev/null +++ b/TriangleCheckerTDD.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/jars/hamcrest-core-1.3.jar b/jars/hamcrest-core-1.3.jar new file mode 100644 index 0000000..9d5fe16 Binary files /dev/null and b/jars/hamcrest-core-1.3.jar differ diff --git a/jars/junit-4.12.jar b/jars/junit-4.12.jar new file mode 100644 index 0000000..3a7fc26 Binary files /dev/null and b/jars/junit-4.12.jar differ diff --git a/out/production/TriangleCheckerAssignment/TriangleChecker$1.class b/out/production/TriangleCheckerAssignment/TriangleChecker$1.class new file mode 100644 index 0000000..57a8775 Binary files /dev/null and b/out/production/TriangleCheckerAssignment/TriangleChecker$1.class differ diff --git a/out/production/TriangleCheckerAssignment/TriangleChecker$TriangleType.class b/out/production/TriangleCheckerAssignment/TriangleChecker$TriangleType.class new file mode 100644 index 0000000..6a3bb50 Binary files /dev/null and b/out/production/TriangleCheckerAssignment/TriangleChecker$TriangleType.class differ diff --git a/out/production/TriangleCheckerAssignment/TriangleChecker.class b/out/production/TriangleCheckerAssignment/TriangleChecker.class new file mode 100644 index 0000000..b3b9d0d Binary files /dev/null and b/out/production/TriangleCheckerAssignment/TriangleChecker.class differ diff --git a/out/test/TriangleCheckerAssignment/TriangleCheckerTest.class b/out/test/TriangleCheckerAssignment/TriangleCheckerTest.class new file mode 100644 index 0000000..e8e9d56 Binary files /dev/null and b/out/test/TriangleCheckerAssignment/TriangleCheckerTest.class differ diff --git a/src/TriangleChecker.java b/src/TriangleChecker.java new file mode 100644 index 0000000..c61db86 --- /dev/null +++ b/src/TriangleChecker.java @@ -0,0 +1,71 @@ +import java.util.Scanner; + +public class TriangleChecker { + + public enum TriangleType { + NONE, + NORMAL, + ISOSCELES, // Gleichschenklig + EQUILATERAL // Gleichseitig + } + + + public static void main(String[] args) { + Scanner s = new Scanner(System.in); + System.out.println("Geben Sie die Seitenlängen ein."); + float a = enterFloat(s, "a: "); + float b = enterFloat(s, "b: "); + float c = enterFloat(s, "c: "); + s.close(); + printAnalysis(a, b, c); + } + + // Eingabe einer Seitenlänge + private static float enterFloat(Scanner s, String prompt) { + System.out.print(prompt); + return s.nextFloat(); + } + + // Ausgabe der ermittelten Dreiecksart + private static void printAnalysis(float a, float b, float c) { + TriangleType type = checkTriangle(a, b, c); + switch (type) { + case NONE: + System.out.println("Kein Dreieck"); + break; + case NORMAL: + System.out.println("Dreieck"); + break; + case ISOSCELES: + System.out.println("Gleichschenkliges Dreieck"); + break; + case EQUILATERAL: + System.out.println("Gleichseitiges Dreieck"); + break; + } + } + + // Analyse der Dreiecksart + public static TriangleType checkTriangle(float a, float b, float c) { + + if (a <= 0 || b <= 0 || c <= 0 || a + b < c || a + c < b || b + c < a) + // kein Dreieck + return TriangleType.NONE; + + if (a + b > c || a + c > b || b + c > a) { + // gleichseitiges Dreieck + if (a == b && b == c) { + return TriangleType.EQUILATERAL; + } + if (a == b || b == c || a == c) { + // gleichschenkliges Dreieck + return TriangleType.ISOSCELES; + } + // normales Dreieck + return TriangleType.NORMAL; + } + + // kein Dreieck + return TriangleType.NONE; + } +} \ No newline at end of file diff --git a/test/TriangleCheckerTest.java b/test/TriangleCheckerTest.java new file mode 100644 index 0000000..93a7b1b --- /dev/null +++ b/test/TriangleCheckerTest.java @@ -0,0 +1,84 @@ +import org.junit.Test; +import static org.junit.Assert.*; + +public class TriangleCheckerTest { + + @Test + public void testValidTriangle() { + + // Arrange + float a = 2; + float b = 3; + float c = 4; + + // Act + TriangleChecker.TriangleType type = TriangleChecker.checkTriangle(a, b, c); + + // Assert + assertEquals(TriangleChecker.TriangleType.NORMAL, type); + } + + // gleichschenkliges Dreieck + @Test + public void testISOSCELESTriangle() { + + // Arrange + float a = 4; + float b = 4; + float c = 3; + + // Act + TriangleChecker.TriangleType type = TriangleChecker.checkTriangle(a, b, c); + + // Assert + assertEquals(TriangleChecker.TriangleType.ISOSCELES, type); + } + + // gleichseitiges Dreieck + @Test + public void testEQUILATERALTriangle() { + + // Arrange + float a = 4; + float b = 4; + float c = 4; + + // Act + TriangleChecker.TriangleType type = TriangleChecker.checkTriangle(a, b, c); + + // Assert + assertEquals(TriangleChecker.TriangleType.EQUILATERAL, type); + } + + // gleichseitiges Dreieck + @Test + public void testNoTriangle1() { + + // Arrange + float a = 100; + float b = 1; + float c = 1; + + // Act + TriangleChecker.TriangleType type = TriangleChecker.checkTriangle(a, b, c); + + // Assert + assertEquals(TriangleChecker.TriangleType.NONE, type); + } + + // gleichseitiges Dreieck + @Test + public void testNoTriangle2() { + + // Arrange + float a = -3; + float b = -3; + float c = -3; + + // Act + TriangleChecker.TriangleType type = TriangleChecker.checkTriangle(a, b, c); + + // Assert + assertEquals(TriangleChecker.TriangleType.NONE, type); + } +}