-
This commit is contained in:
commit
d672b9bf32
9
.idea/TriangleChecker.iml
generated
Normal file
9
.idea/TriangleChecker.iml
generated
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
10
.idea/libraries/jars.xml
generated
Normal file
10
.idea/libraries/jars.xml
generated
Normal file
@ -0,0 +1,10 @@
|
||||
<component name="libraryTable">
|
||||
<library name="jars">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/jars/junit-4.12.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/jars/hamcrest-core-1.3.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
6
.idea/misc.xml
generated
Normal file
6
.idea/misc.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="openjdk-17" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/TriangleCheckerAssignment.iml" filepath="$PROJECT_DIR$/TriangleCheckerAssignment.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
81
README.md
Normal file
81
README.md
Normal file
@ -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:
|
||||
|
||||
- <code>TriangleChecker</code> enthält den Produktivcode
|
||||
- <code>TriangleCheckerTest</code> enthält die Tests
|
||||
|
||||
Mit Hilfe von TDD soll insbesondere die Methode
|
||||
|
||||
<code>
|
||||
checkTriangle(float a, float b, float c)
|
||||
</code>
|
||||
|
||||
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.
|
13
TriangleCheckerAssignment.iml
Normal file
13
TriangleCheckerAssignment.iml
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="jars" level="project" />
|
||||
</component>
|
||||
</module>
|
13
TriangleCheckerTDD.iml
Normal file
13
TriangleCheckerTDD.iml
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="jars" level="project" />
|
||||
</component>
|
||||
</module>
|
BIN
jars/hamcrest-core-1.3.jar
Normal file
BIN
jars/hamcrest-core-1.3.jar
Normal file
Binary file not shown.
BIN
jars/junit-4.12.jar
Normal file
BIN
jars/junit-4.12.jar
Normal file
Binary file not shown.
BIN
out/production/TriangleCheckerAssignment/TriangleChecker$1.class
Normal file
BIN
out/production/TriangleCheckerAssignment/TriangleChecker$1.class
Normal file
Binary file not shown.
Binary file not shown.
BIN
out/production/TriangleCheckerAssignment/TriangleChecker.class
Normal file
BIN
out/production/TriangleCheckerAssignment/TriangleChecker.class
Normal file
Binary file not shown.
BIN
out/test/TriangleCheckerAssignment/TriangleCheckerTest.class
Normal file
BIN
out/test/TriangleCheckerAssignment/TriangleCheckerTest.class
Normal file
Binary file not shown.
71
src/TriangleChecker.java
Normal file
71
src/TriangleChecker.java
Normal file
@ -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;
|
||||
}
|
||||
}
|
84
test/TriangleCheckerTest.java
Normal file
84
test/TriangleCheckerTest.java
Normal file
@ -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);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user