Я использую параметризованные тестовые аннотации JUnit 4 для выполнения тестов на равенство данных, поступающих из неизвестного числа файлов.
По какой-то странной причине тест всегда проверяет один и тот же файл, как если бы всегда использовался один и тот же массив из коллекции, используемой для передачи параметров.
Я уверен, что мне здесь не хватает чего-то элементарного, но я не вижу, что. Может ли кто-нибудь дать мне полезный совет?
Вот мой код:
@RunWith(value = Parameterized.class)
public class XMLUnitTest extends XMLTestCase {
static final File ORACLE_DIR = new File("some/directory/path");
static final String PATH_TO_LOG = "some/file/path";
private String oracleXml;
private String testXml;
private String testName;
public XMLUnitTest(String o, String t, String n) {
this.oracleXml = o;
this.testXml = t;
this.testName = n;
}
// (snip) file-handling methods
@Parameters
static public Collection<Object[]> data() {
String logfile = null;
File[] xmlFilesArray;
ArrayList<String> parsedXMLs = new ArrayList<String>();
ArrayList<String> xmlNames = new ArrayList<String>();
String[] xmlArgs = new String[3];
Collection<Object[]> data = new ArrayList<Object[]>();
try {logfile = readFileAsString(PATH_TO_LOG);}
catch (IOException e) {// (snip) error handling}
String[] parsedLogs = logfile.split("someRegex", 0);
for (int i = 0; i < parsedLogs.length; i++) {
parsedLogs[i] = "<xml>"+parsedLogs[i]+"</xml>";
}
xmlFilesArray = ORACLE_DIR.listFiles();
Arrays.sort(xmlFilesArray, nameCompare);
for (int i = 0; i < xmlFilesArray.length; i++) {
if (!xmlFilesArray[i].isDirectory()) {
try {
parsedXMLs.add(convertXMLFileToString(xmlFilesArray[i].getAbsolutePath()));
xmlNames.add(xmlFilesArray[i].getName());
}
catch (Exception e) {// (snip) error handling}
}
}
for (int i = 0; i < parsedLogs.length; i++) {
xmlArgs[0] = parsedXMLs.get(i);
xmlArgs[1] = parsedLogs[i];
xmlArgs[2] = xmlNames.get(i);
System.out.println(xmlArgs[2]); //debug
data.add(xmlArgs);
}
return data;
}
@SuppressWarnings("unchecked")
@Test
public void equality() throws Exception {
System.out.println("Working on test: "+testName);
// (snip) some testing
}
}
Это частично запутано, но должно быть все необходимое, чтобы найти мою ошибку ...
System.out.prints используются для отладки: один в статическом генераторе параметров показывает имена правильных файлов, означая, что объект "данные" является правильным. Тот, что в самом тесте, всегда печатает одно и то же, то есть тест всегда выполняется с одним и тем же массивом параметров (но он выполняется 7 раз, количество массивов в моей коллекции!) Я не понимаю. Я что-то упустил из-за типа параметров, передаваемых в JUnit?