This is the codeAbility Sharing Platform! Learn more about the codeAbility Sharing Platform.

Skip to content

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);
    • 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);

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