I teraz powiedz mi, laikowi, który nie zna domeny, co ten test sprawdza? Nazewnictwo, użycie ifów zamiast assert
/assume
, w efekcie nie wiesz co sie dzieje.
edit:
Swoją drogą przepisałem to w ten sposób:
public class MinizincBasedTestsHelper {
protected String testFilename;
protected static Fz2jacop fz2jacop;
protected static final String relativePath = "src/test/fz/";
protected static String timeCategory;
protected static final String listFileName = "list.txt";
protected static final boolean printInfo = true;
@BeforeClass public static void initialize() {
fz2jacop = new Fz2jacop();
}
protected static List<String> result(String filename) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream old = System.out;
System.setOut(new PrintStream(baos));
try {
fz2jacop.main(new String[] {relativePath + filename});
} finally {
System.out.flush();
System.setOut(old);
String result = baos.toString();
if (printInfo) {
System.out.println(filename + "\n" + result);
}
return Arrays.asList(result.split("\n")).stream().filter(l->!l.isEmpty()).map(String::trim).collect(Collectors.toList());
}
}
protected static List<String> expected(String filename) throws IOException {
String filePath = new File(relativePath + filename).getAbsolutePath();
return Files.readAllLines(Paths.get(filePath), StandardCharsets.UTF_8).stream().filter(l->!l.isEmpty()).map(String::trim).collect(Collectors.toList());
}
protected static Collection<String> fileReader(String timeCategory) throws IOException {
System.out.println("timeCategory" + timeCategory);
FileReader file = new FileReader(relativePath + timeCategory + listFileName);
BufferedReader br = new BufferedReader(file);
String line = "";
List<String> list = new ArrayList<String>();
int i = 0;
while ((line = br.readLine()) != null) {
list.add(i, line);
i++;
}
return list;
}
protected void testExecution(String timeCategory) throws IOException {
System.out.println("Test file: " + timeCategory + testFilename);
List<String> expectedResult = expected(timeCategory + testFilename + ".out");
List<String> result = result(timeCategory + testFilename + ".fzn");
assertNotEquals("" + "File path: " + timeCategory + testFilename + ".fzn " + " gave no output to compare against.", 0, result.size());
assertEquals(result, expectedResult);
}
}
I nagle okazuje się, że można, to przeczytać. Jedyne co pozostaje t timeouty, i jakieś różnice w samych plikach. Jednak jest tu więcej błędów w samym kodzie np. protected static
, które wprowadzają zamieszanie.
Timeouty – prosta przyczyna, niektóre testy wykonują się bardzo długo. Jest to powtarzalne zachowanie dla konkretnych testów i moim zdaniem wynika, to z ilości danych, które muszą przerobić. Czasami wystarczy, by maszyna musiała się zająć czymś innym np. odpalony został GC, i już mamy po teście.
Zależności – być może występuje to tylko u mnie, ale zazwyczaj wysypuje się test, który jest uruchomiony po teście, który miał timeout. Wniosek, testy nie sprzątają po sobie. Dodatkowo walą raźnie na System.out
, który jest synchronizowany i mieszają się informacje.