Skip to content
Snippets Groups Projects
Commit d6e9813f authored by Goik Martin's avatar Goik Martin
Browse files

Simple test

parent 5b135436
No related branches found
No related tags found
No related merge requests found
/.settings
/.idea
/*.iml
/.classpath
/.project
/target
<?xml version="1.0" encoding="UTF-8"?>
<book version="5.0" xml:id="klausur_SoSe_2017" xml:lang="de"
xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xila="http://www.w3.org/2001/XInclude/local-attributes"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:trans="http://docbook.org/ns/transclusion"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:m="http://www.w3.org/1998/Math/MathML"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:db="http://docbook.org/ns/docbook">
<!-- saxon9he-xslt -s:klausur.xml -xsl:/usr/share/hdm-docbook-xsl/CustomLayer/Klausur/docbook2klausur.xsl -->
<info>
<title/>
<author>
<personname/>
</author>
<pubdate/>
</info>
<chapter xml:id="task1">
<title>Klassenmethoden</title>
<!-- Hier gemeinsames zip Archiv hochladen, auch von anderen Aufgaben. -->
<section xml:id="aufgabe1_prepare">
<title>Vorbereitung</title>
<para>Entpacken Sie das oben sichtbare Archiv
<filename>exam.zip</filename> und importieren Sie den resultierenden
Ordner <filename>Exam</filename> als <productname>Maven</productname>
Projekt.</para>
</section>
<section xml:id="aufgabe1_descr">
<title>Beschreibung</title>
<para>Implementieren Sie die vorbereiteten Methoden gemäß den in den
jeweiligen <productname>Javadoc</productname> Beschreibungen. Sie
bekommen bei unvollständiger Implementierung Teilpunkte.</para>
</section>
<section xml:id="aufgabe1_task">
<title>Aufgabe</title>
<para>Vervollständigen Sie die Implementierung aller Methoden der Klasse
Helper im <foreignphrase xml:lang="en">package</foreignphrase>
<package>de.hdm_stuttgart.mi.sd1.aufgabe1</package>.</para>
<tip>
<para>Das <foreignphrase xml:lang="en">package</foreignphrase>
<package>de.hdm_stuttgart.mi.sd1.aufgabe1</package> im Test Zweig
Ihres Projekts enthält eine zugehörige
<productname>Junit</productname> Testklasde TestHelper.</para>
</tip>
</section>
<section xml:id="aufgabe1_commonHints">
<title>Allgemeine Hinweise</title>
<itemizedlist>
<listitem>
<para>Für jede Methode stehen Ihnen in der zugehörigen Testklasse
korrespondierende Tests zur Verfügung. Nutzen Sie diese!</para>
</listitem>
<listitem>
<para>Die von Ihnen erreichte Punktzahl richtet sich nach der Anzahl
positiv bestandener Tests. Sie bekommen keine Punkte, wenn Ihre
Implementierung in Bezug auf einen einzelnen Test lediglich
<quote>fast richtig</quote> ist. Implementieren Sie im Zweifelsfall
weniger Methoden, diese dafür aber vollständig.</para>
</listitem>
<listitem>
<para>Die <productname>Javadoc</productname> Kommentare der
jeweiligen Methoden beschreiben das gewünschte Verhalten. Über den
Menüpunkt <guimenu>Tools</guimenu> <guisubmenu>Generate
JavaDoc</guisubmenu> erhalten Sie eine HTML Ansicht zur besseren
Lesbarkeit.</para>
<para>Lesen Sie die (ggf. generierte) Dokumentation <emphasis
role="bold">sehr genau</emphasis>.</para>
</listitem>
<listitem>
<para>Beachten Sie alle Sonderfälle. Dazu zählen insbesondere
<code>null</code> Werte von Variablen oder enthaltene
<code>null</code> Werte in <foreignphrase
xml:lang="en">Arrays</foreignphrase>.</para>
</listitem>
<listitem>
<para>Nutzen Sie den <foreignphrase
xml:lang="en">Debugger</foreignphrase> oder logging <foreignphrase
xml:lang="en">Statements</foreignphrase> im Fall fehlgeschlagener
Testfälle.</para>
</listitem>
<listitem>
<para>Die Ausführung von
<package>de.hdm_stuttgart.mi.sd1.test</package>.<classname>ShowAllReachedPoints</classname>
im Testzweig Ihres Projekts zeigt Ihnen die in allen
Programmieraufgaben aktuell erreichten Punkte.</para>
</listitem>
</itemizedlist>
</section>
<section version="5.1" xml:id="uploadFirst" xml:lang="de">
<title>Hochladen Ihrer Lösung in das Klausursystem</title>
<para>Exportieren Sie Ihr Projekt in ein Archiv mit Namen
<filename>solution_1.zip</filename>. Nutzen Sie dazu die durch
Rechtsklick auf Ihre Projektwurzel <guilabel>Compress</guilabel>
Funktion des Dateimanagers und akzeptieren Sie die Standard Option
<filename>.zip</filename>. Laden Sie danach
<filename>solution_1.zip</filename> über die <quote><foreignphrase
xml:lang="en">Upload</foreignphrase> File</quote> Funktion am unteren
Seitenende der Aufgabe in das <productname>Ilias</productname> System
hoch. Wichtige Punkte:</para>
<itemizedlist>
<listitem>
<para>Wählen Sie beim Hochladen nicht die falsche Datei, etwa das
Ausgangsarchiv <filename>exam.zip</filename> oder eine ältere
Version Ihres Projekts.</para>
</listitem>
<listitem>
<para>Kontrollieren Sie nach dem Hochladen die Sichtbarkeit Ihres
<filename>solution_1.zip</filename> Archivs im Klausursystem.</para>
</listitem>
<listitem>
<para>Sie können mehrere Versionen
<filename>solution_2.zip</filename> ... hochladen und bei Bedarf
ältere im <productname>Ilias</productname> System löschen. Nur die
zuletzt hochgeladene Version wird bewertet.</para>
</listitem>
</itemizedlist>
<caution>
<itemizedlist>
<listitem>
<para>Reservieren Sie für den Vorgang des Hochladens ausreichend
Zeit vor Klausurende.</para>
</listitem>
<listitem>
<para>Bearbeitungen, welche sich nach Klausurende lediglich auf
Ihrem Arbeitsplatzrechner befinden, werden nicht gewertet.</para>
</listitem>
<listitem>
<para>Laden Sie keine Projekte mit <productname>Java</productname>
Syntaxfehlern hoch, diese werden nicht bewertet!</para>
</listitem>
<listitem>
<para>Exportieren Sie Ihr Projekt nicht als
<filename>.tgz</filename>, <filename>.java</filename>,
<filename>.tar.gz</filename> <acronym>o.ä.</acronym>. Das
Klausursystem akzeptiert nur Archive mit der Endung
<filename>.zip</filename>.</para>
</listitem>
</itemizedlist>
</caution>
</section>
</chapter>
<chapter xml:id="task2">
<title>Ersatzteile</title>
<section xml:id="aufgabe2_prepare">
<title>Vorbereitung</title>
<para>Falls Sie die erste Aufgabe »<xref linkend="task1"/>« bearbeitet
haben, arbeiten Sie einfach an Ihrem <productname>Maven</productname>
Projekt weiter. Ansonsten lesen Sie bitte die Anleitung in der Aufgabe
»<xref linkend="task1"/>« zum <productname>Eclipse</productname>
<productname>Maven</productname> Projektimport sowie weitere Hinweise
zum Hochladen in das <productname>Ilias</productname> System.</para>
</section>
<section xml:id="aufgabe2_descr">
<title>Beschreibung</title>
<para>Implementierung von Methoden und einer neuen Klasse zur Verwaltung
von Ersatzteilen.</para>
<para>Das <productname>Maven</productname> Projektskelett enthält eine
Klasse <classname>Ersatzteil</classname> im <foreignphrase
xml:lang="en">Package</foreignphrase>
<package>de.hdm_stuttgart.mi.sd1.aufgabe2</package>.</para>
<para>Implementieren Sie die nachfolgend beschriebenen Funktionalitäten.
Sie bekommen bei unvollständiger Implementierung Teilpunkte. Nutzen Sie
zum Test Ihrer Implementierung die <productname>Junit</productname>
Tests in
<package>de.hdm_stuttgart.mi.sd1.test.aufgabe2</package>.<classname>Test_Ersatzteil</classname>.</para>
</section>
<section xml:id="aufgabe2_task">
<title>Aufgaben</title>
<orderedlist>
<listitem>
<para>Ein Ersatzteil soll durch Angabe einer Teilenummer und einer
Bezeichnung erstellt werden können. Wir betrachten ein Beispiel für
das gewünschte Verhalten:</para>
<programlisting language="java">final Ersatzteil kurbelwelle =
new Ersatzteil(12345, "Kurbelwelle");
System.out.println(kurbelwelle);
final Ersatzteil brandneu = // Bezeichnung noch
new Ersatzteil(54321, null); // unbekannt.
System.out.println(brandneu);</programlisting>
<para>Dies soll folgende Ausgabe liefern:</para>
<screen>Kurbelwelle, Teilenummer:12345
Bezeichnung unbekannt, Teilenummer:54321</screen>
<para>Ergänzen Sie die Klasse <classname>Ersatzteil</classname> um
einen passenden Konstruktor, <code>private</code> Attribute und eine
<methodname
xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--">toString()</methodname>
Methode.</para>
<tip>
<itemizedlist>
<listitem>
<para>Das Kontextmenü <quote><foreignphrase
xml:lang="en">Source</foreignphrase></quote>
<quote>Override/Implement <foreignphrase
xml:lang="en">Methods</foreignphrase>...</quote> in
<productname>Eclipse</productname> und die <interfacename
xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Override.html">@Override</interfacename>
Annotation sind Ihre Freunde.</para>
</listitem>
<listitem>
<para>Achten Sie im Hinblick auf die
<productname>Junit</productname> Tests sehr genau auf
Leerzeichen, Groß/Kleinschreibung etc. in der erzeugten
Zeichenkette. Erbsenzähler[innen] sind im Vorteil!</para>
</listitem>
</itemizedlist>
</tip>
</listitem>
<listitem>
<para>Zwei Ersatzteil Instanzen sollen bezüglich
<methodname>equals()</methodname> genau dann gleich sein, wenn ihre
Teilenummern gleich sind. Die Bezeichnung der Teile soll irrelevant
sein. Wir betrachten ein Beispiel für das gewünschte
Verhalten:</para>
<programlisting language="java">final Ersatzteil
kurbelwelle = new Ersatzteil(12345, "Kurbelwelle"),
schwurbelwelle = new Ersatzteil(12345, "Schwurbelwelle"), // Tippfehler?
lenkrad = new Ersatzteil(54321, "Lenkrad");
System.out.println("kurbelwelle gleich schwurbelwelle? " +
kurbelwelle.equals(schwurbelwelle));
System.out.println("kurbelwelle gleich lenkrad? " +
kurbelwelle.equals(lenkrad));</programlisting>
<para>Dies soll folgende Ausgabe liefern:</para>
<screen>kurbelwelle gleich schwurbelwelle? true
kurbelwelle gleich lenkrad? false</screen>
</listitem>
<listitem>
<para>Definieren Sie die
<classname>Ersatzteil</classname>.<methodname>equals()</methodname>
Methode dergestalt, dass sie in abgeleiteten Klassen nicht
überschrieben werden <emphasis role="bold">kann</emphasis>.</para>
</listitem>
<listitem>
<para>Leiten Sie eine Klasse <classname>Reifen</classname> von
<classname>Ersatzteil</classname> im selben <foreignphrase
xml:lang="en">Package</foreignphrase> (<emphasis>wichtig für
zugehörige <productname>Junit</productname> Tests!</emphasis>)
ab.</para>
<para>Für die Erzeugung von <classname>Reifen</classname> Instanzen
soll neben der Teilenummer die maximal erlaubte Fahrgeschwindigkeit
angegeben werden müssen. Die Teilebezeichnung in der Basisklasse
<classname>Ersatzteil</classname> soll automatisch auf
<code>"Reifen"</code> gesetzt werden:</para>
<programlisting language="java">final Reifen reifen = // Reifen mit Teilenummer 1234 und Maximalgeschwindigkeit 160 Km pro Stunde,
new Reifen(1234, 160); // Die feste Teilebezeichnung <emphasis role="bold">"Reifen"</emphasis> wird in der
// Basisklasse <classname>Ersatzteil</classname> automatisch gesetzt.
System.out.println(reifen);</programlisting>
<para>Nutzen Sie Ihre zuvor implementierte
<classname>Ersatzteil</classname>.<methodname>toString()</methodname>
Methode und überschreiben Sie diese in der Klasse
<classname>Reifen</classname> geeignet, damit Sie folgende Ausgabe
erhalten:</para>
<screen>Reifen, Teilenummer:1234, Maximalgeschwindigkeit:160 Kmh</screen>
<tip>
<para>Achten Sie auch diesmal sehr genau auf Leerzeichen,
Groß/Kleinschreibung etc. in der erzeugten Zeichenkette.
Erbsenzähler[innen] sind weiterhin im Vorteil!</para>
</tip>
</listitem>
</orderedlist>
</section>
<section version="5.1" xml:id="uploadFollow" xml:lang="de">
<title>Hochladen Ihrer Lösung in das Klausursystem</title>
<para>Laden Sie die Lösung dieser Aufgabe als gemeinsamen Projekt Export
mit der ersten Aufgabe <xref linkend="task1"/> gemäß den dortigen
Hinweisen hoch. Falls Sie die Aufgabe »<xref linkend="task1"/>«
ebenfalls bearbeitet haben, enthält Ihr <foreignphrase
xml:lang="en">Upload</foreignphrase> die Lösungen zu beiden
Aufgaben.</para>
<para>Tragen Sie im Freitextfeld weiter unten genau einen der beiden
Texte ein:</para>
<itemizedlist>
<listitem>
<para>Ich habe die aktuelle Aufgabe bearbeitet und erhoffe dafür
Punkte.</para>
</listitem>
<listitem>
<para>Ich habe die aktuelle Aufgabe nicht bearbeitet.</para>
</listitem>
</itemizedlist>
</section>
</chapter>
</book>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.hdm-stuttgart.mi.sd1</groupId>
<artifactId>sd1_test_0100</artifactId>
<version>0.9</version>
<packaging>jar</packaging>
<name>sd1_test_0100</name>
<url>https://freedocs.mi.hdm-stuttgart.de/sd1FirstJavaProject.html</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>hdm-mi-internal-maven-repo</id>
<url>https://maven.mi.hdm-stuttgart.de/artifacts</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>de.hdm_stuttgart.mi.exam</groupId>
<artifactId>unitmarking</artifactId>
<version>0.9</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.3</version>
<configuration />
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<configuration>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>de.hdm_stuttgart.mi.sd1.test.ShowReachedPoints</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>fat-tests</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>true</unpack>
<scope>test</scope>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.directory}/test-classes</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*.class</include>
</includes>
<useDefaultExcludes>true</useDefaultExcludes>
</fileSet>
<fileSet>
<directory>${project.build.directory}/classes</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*.class</include>
</includes>
<useDefaultExcludes>true</useDefaultExcludes>
</fileSet>
</fileSets>
</assembly>
package de.hdm_stuttgart.mi.sd1.aufgabe1;
/**
* Helper methods
*
*/
public class Helper {
/**
* Find the smaller of two possibly different values.
*
* @param a The first value
* @param b The second value
* @return The first value if smaller than the second. The second value otherwise.
*/
public static int getMinimum(int a, int b) {
return 1234;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<File name="A1" fileName="A1.log" append="false">
<PatternLayout pattern="%t %-5p %c{2} - %m%n"/>
</File>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
</Console>
</Appenders>
<Loggers>
<!-- You my want to define class or package level per-logger rules -->
<Logger name="de.hdm_stuttgart.mi.sd1.App" level="debug">
<AppenderRef ref="A1"/>
</Logger>
<Root level="info">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
\ No newline at end of file
package de.hdm_stuttgart.mi.sd1.test;
import de.hdm_stuttgart.mi.exam.unitmarking.RunTests;
import de.hdm_stuttgart.mi.sd1.test.aufgabe1.Test_Helper;
public class ShowReachedPoints {
/**
* Execution reveals the number of reached points.
*
* @param args Unused
*/
public static void main(String[] args) {
RunTests.exec(
"Aufgabe 1" , Test_Helper.class);
}
}
package de.hdm_stuttgart.mi.sd1.test.aufgabe1;
import org.junit.Assert;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import de.hdm_stuttgart.mi.exam.unitmarking.ExaminationTestDefaults;
import de.hdm_stuttgart.mi.exam.unitmarking.Marking;
import de.hdm_stuttgart.mi.sd1.aufgabe1.Helper;
public class Test_Helper {
/**
* first argument smaller than second
*/
@Test
@Marking(points=2)
public void test_100() {
Assert.assertEquals(1, Helper.getMinimum(1, 7));
Assert.assertEquals(0, Helper.getMinimum(0, 1));
Assert.assertEquals(-4, Helper.getMinimum(-4, -2));
Assert.assertEquals(-4, Helper.getMinimum(-4, 0));
Assert.assertEquals(-4, Helper.getMinimum(-4, 6));
}
/**
* first argument smaller than second
*/
@Test
@Marking(points=2)
public void test_200() {
Assert.assertEquals(1, Helper.getMinimum(6, 1));
Assert.assertEquals(-1, Helper.getMinimum(0, -1));
Assert.assertEquals(-7, Helper.getMinimum(-4, -7));
Assert.assertEquals(-3, Helper.getMinimum(4, -3));
}
/**
* Arguments equal
*/
@Test
@Marking(points=2)
public void test_300() {
Assert.assertEquals(5, Helper.getMinimum(5, 5));
Assert.assertEquals(0, Helper.getMinimum(0, 0));
Assert.assertEquals(-4, Helper.getMinimum(-4, -4));
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment