Als ich den Testcode las, den ich vor vier Jahren geschrieben hatte, stellte ich fest, dass die Absicht eines bestimmten Vergleichstestcodes schwer zu lesen war. Der Inhalt des Tests ist korrekt, aber ich konnte mir beim Lesen des Tests keinen bestimmten Anwendungsfall vorstellen.
Es ist bis zu einem gewissen Grad ein guter Testcode, da er die Richtigkeit des Produktcodes garantiert. Wenn möglich, wäre es jedoch glücklicher, wenn die Betreuer der Nachwelt die Absicht lesen könnten. Also fand ich eine freie Zeit und versuchte sie neu zu schreiben.
In diesem Artikel werden wir den alten Testcode und den verbesserten Testcode vorstellen und als Gedenkgottesdienst verwenden.
public class TodayReportComparator implements Comparator<Report> {
@Override
public int compare(Report lhs, Report rhs) {
//Viel Glück
}
}
TodayReportComparator ist ein Komparator, der die heutigen Berichte sortiert, um sie zu priorisieren.
Beginnen wir mit dem konventionellen Test. Dieser Test überprüft das Ergebnis der Ausführung von "Comparator # compare".
public class TodayReportComparatorTest {
private TodayReportComparator sut;
@Before
public void setUp() {
sut = new TodayReportComparator();
}
@Test
public void Der heutige Bericht steht ganz oben auf dem gestrigen Bericht() {
final long now = System.currentTimeMillis();
lhs = new Report(new Date(now));
rhs = new Report(new Date(now - 24 * 60 * 60 * 1000));
assertThat(sut.compare(lhs, rhs), lessThan(0)); //lhs ist hoch
}
@Test
public void Der Bericht von heute steht ganz oben auf dem Bericht von morgen() {
final long now = System.currentTimeMillis();
lhs = new Report(new Date(now));
rhs = new Report(new Date(now + 24 * 60 * 60 * 1000));
assertThat(sut.compare(lhs, rhs), lessThan(0)); //lhs ist hoch
}
}
lhs
, rhs
) wird verwendet und sieht aus wie ein Komparator-Test.Collections.sort
zu verwenden, aber in diesem Anwendungsfall werden keine Tests geschriebenIn jedem Fall ist es eine Geschichte, dass Sie sich an das Verhalten von Java SE erinnern sollten, oder Sie können es sich mit ein wenig Nachdenken vorstellen. Aber aus Sicht des Rezensenten möchte ich mein Gehirn dort ehrlich gesagt nicht zu sehr einsetzen.
In dem neu geschriebenen Test habe ich mich auf das konzentriert, was ich als Ergebnis von "Collections.sort" haben wollte, was die tatsächliche Verwendung ist.
public class TodayReportComparatorTest {
private TodayReportComparator sut;
@Before
public void setUp() {
sut = new TodayReportComparator();
}
@Test
public void Der heutige Bericht steht ganz oben auf dem gestrigen Bericht() {
// Given
final long now = System.currentTimeMillis();
Report todayReport = new Report(new Date(now));
Report yesterdayReport = new Report(new Date(now - 24 * 60 * 60 * 1000));
List<Report> actual = Arrays.asList(
yesterdayReport,
todayReport
);
List<Report> expected = Arrays.asList(
todayReport, //Der heute datierte Bericht steht ganz oben
yesterdayReport
);
// When
Collections.sort(actual, sut);
// Then
assertThat(actual, is(expected));
}
@Test
public void Der Bericht von heute steht ganz oben auf dem Bericht von morgen() {
// Given
final long now = System.currentTimeMillis();
Report todayReport = new Report(new Date(now));
Report tomorrowReport = new Report(new Date(now + 24 * 60 * 60 * 1000));
List<Report> actual = Arrays.asList(
tomorrowReport,
todayReport
);
List<Report> expected = Arrays.asList(
todayReport, //Der heute datierte Bericht steht ganz oben
tomorrowReport
);
// When
Collections.sort(actual, sut);
// Then
assertThat(actual, is(expected));
}
}
Ich habe es nach meinem aktuellen Geschmack geschrieben. Ich denke, dass die Absicht, dem heutigen Bericht "Priorität einzuräumen und ihn zur Sprache zu bringen", die ich ursprünglich wollte, im Test zum Ausdruck gebracht werden kann.
Derzeit habe ich die Angewohnheit, beim Schreiben von Java TDD zu schreiben. Wenn ich einen Test schreiben kann, schreibe ich den Test zuerst.
Testcode ist nicht nur nützlich für die Richtigkeit des Produktcodes, sondern auch zum Ausdrücken und Verfeinern der Benutzerfreundlichkeit. Es wäre schön, Testcode schreiben zu können, der zur Verbesserung des Produktcodes beiträgt.
Recommended Posts