3

@TestCaseName有没有办法使用注释打印数组的内容(作为测试参数之一传递) ?

我的意思是我想要这个测试用例

private static final File JAVA_DIRECTORY = get("src/main/java/").toFile();
private static final String[] NOT_ACCEPTABLE_IN_JAVA_DIRECTORY = {"groovy", "css", "html"};

public Object[] filesNotAcceptedInDirectories() {
    return $(
            $(JAVA_DIRECTORY, NOT_ACCEPTABLE_IN_JAVA_DIRECTORY)
    );
}

@Test
@Parameters(method = "filesNotAcceptedInDirectories")
@TestCaseName("Verify that no files with extensions {1} are present in directory {0}")
public void verifyFilesArePlacedInAppropriateDirectories(File directory, String[] unacceptableFiles) {
    assertThat(listFiles(directory, unacceptableFiles, true)).isEmpty();
}

显示为

验证目录 src\main\java 中是否存在扩展名为 [groovy, css, html] 的文件

我目前得到的是

验证目录 src\main\java 中不存在扩展名为 String[] 的文件

4

2 回答 2

1

目前看来是不可能的。字符串化参数的部分是junitparams.internal.Utils#addParamToResult

private static String addParamToResult(String result, Object param) {
    if (param == null)
        result += "null";
    else {
        try {
            tryFindingOverridenToString(param);
            result += param.toString();
        } catch (Exception e) {
            result += param.getClass().getSimpleName();
        }
    }
    return result;
}

private static void tryFindingOverridenToString(Object param)
        throws NoSuchMethodException {
    final Method toString = param.getClass().getMethod("toString");

    if (toString.getDeclaringClass().equals(Object.class)) {
        throw new NoSuchMethodException();
    }
}

您可以看到,只有在参数覆盖的情况下才使用Object#toString覆盖的toString,否则它只是类的简单名称,如果是 String 数组,则为String[].

于 2015-12-29T09:12:01.190 回答
1

新版本发布后(1.0.5)将成为可能 - https://github.com/Pragmatists/JUnitParams/issues/70

于 2016-01-20T14:56:33.983 回答