Vorschlag: Implementierung um versteckte Tests zu ermöglichen
Guten Tag,
wir haben im letzten Jahr viele Tests als "versteckt" markiert gehabt, um zu verhindern, dass Studenten in ihren Programmen, die IO Kombinationen abfangen. Ich habe ein bisschen rumprobiert und hätte eine Möglichkeit gefunden, wie man das in die bisherigen IOTests einbauen könnte.
In IOTests.java
:
-
die Klasse
IOTestStep
erweitern um:-
private String customErrMsg
// Name egal -
public String getCustomErrMsg() { return customErrMsg; }
-
public void setCustomErrMsg(String customErrMsg) { this.customErrMsg = customErrMsg; }
-
-
im
@Test
:- nach der ersten for-Schleife (
for(IOTestStep testStep: ioTest.getIoSequence())
):boolean customErrMsgPresent = !(testStep.customErrMsg == null || testStep.customErrMsg.isEmpty());
- anstelle der Zeile
assertEquals("After conversation \n" + conversation + " we expected " + outputLine + " but got " + realOutput, outputLine, realOutput);
:- die beiden Zeilen
boolean equality = realOutput.equals(outputLine);
assertTrue(customErrMsgPresent ? testStep.customErrMsg : "After conversation \n" + conversation + " we expected " + outputLine + " but got " + realOutput, equality);
- die beiden Zeilen
- und anstelle der Zeile
assertTrue("After conversation \n" + conversation + " we expected " + outputPattern.pattern() + " but got " + realOutput, isMatch);
- die Zeile
assertTrue(customErrMsgPresent ? testStep.customErrMsg : "After conversation \n" + conversation + " we expected " + outputPattern.pattern() + " but got " + realOutput, isMatch);
- die Zeile
- nach der ersten for-Schleife (
in ioTests.json
:
{
"_comment": ["This file defines a set of IO Tests for a certain class (with a main method).",
"Each IO-test is defined by a name and ",
"an alternating sequence of input and output lines (fixed strings or regular expressions).",
"A test timeout is optional (default is 5000 ms)."
],
"class": "org.codeability.artemis.structtest.Exercise10",
"ioTests": [{
"name": "erster IOTest",
"ioSequence": [{
"input": ["1", "2", "3", "4"],
"output": ["Die Zahl ist 1", "Die Zahl ist 2", "Die Zahl ist 321312", "Die Zahl ist 4"],
"customErrMsg": "Diese Nachricht wird anstelle der internen IO Fehlermeldung ausgegeben"
}]
},
{
"name": "zweiter IOTest",
"ioSequence": [{
"input": ["1", "2", "3", "4"],
"output": ["Die Zahl ist 1", "Die Zahl ist 2", "Die Zahl ist 321312", "Die Zahl ist 4"]
}]
}
]
}
Die Zeile assertEquals("After conversation \n" + conversation + " we expected " + outputLine + " but got " + realOutput, outputLine, realOutput);
würde ich generell mit assertTrue(...)
ersetzen, da sonst zusätzlich zu eurer Custom Fehlermeldung noch die von JUnit ausgegeben wird.
Liebe Grüße Manuel
PS: Ich hänge meine IOTests.java Datei noch mit an, die basiert jedoch noch auf der früheren Version und nicht auf der aktuellen.IOTests_ImplementCustomErrMsgForHiddenTests.java