java - 参数化测试: Collection not read by JUnit?

标签 java annotations junit4

我正在使用 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 用于调试:静态参数生成器中的 System.out.prints 显示正确文件的名称,这意味着对象“数据”是正确的。测试本身总是打印相同的内容,这意味着测试总是使用相同的参数数组运行(但它运行了 7 次,这是我集合中的数组数量!)我不明白。关于传递给 JUnit 的参数类型,我是否遗漏了一些内容?

最佳答案

这个
String[] xmlArgs = new String[3];
应该在 for 循环中。
您总是更新 xmlArgs-Array 的同一实例并插入它..

关于java - 参数化测试: Collection not read by JUnit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6017403/

相关文章:

java - 使用 @NonNullByDefault 和数组时如何删除 'nullness annotation is redundant' 警告? (Eclipse、空注释)

java - 如何在spring mvc中使 session 失效以实现注销

java - 如何使用 JUnit 中的公共(public)方法测试私有(private)字段设置为提供的值?

java - Solrj 将我的日期从 UTC 格式化为 CEST

java - 如何在 JPA 中重新打开连接

java - 将字符串中的不等式符号拆分为标记? (Java/正则表达式)

java - 在 Java 中使用 VisualBasic DLL

Java - @Before 和@test 注解

java - Junit 3 到 JUnit 4 转换

java - 可选类型的单元测试用例