gpt4 book ai didi

java - 根据参数获取失败的测试用例数

转载 作者:行者123 更新时间:2023-11-30 10:43:41 25 4
gpt4 key购买 nike

我正在尝试根据给定参数运行测试用例,并获取与每个给定参数对应的输出。我能够使用 JUnit Parameterized Test 根据提供的参数运行测试用例.我的测试类如下:

@RunWith(Parameterized.class)
public class NumberChecker {

private final Integer inputNumber;
private final Boolean isPrime;
private final Long sumOfDigits;

public NumberChecker(Integer inputNumber, Boolean expectedResult, Long sumOfDigits) {
this.inputNumber = inputNumber;
this.isPrime = expectedResult;
this.sumOfDigits = sumOfDigits;
}

@Parameterized.Parameters
public static List primeNumbers() {
return Arrays.asList(new Object[][]{
{2, true, 2L},
{6, false, 6L},
{19, true, 10L},
{22, false, 4L},
{23, true, 5L}
});
}

@Test
public void testPrimeNumberChecker() {
assertEquals(isPrime, PrimeNumberChecker.validate(inputNumber));
}

@Test
public void testSumOfDigits() {
assertEquals(sumOfDigits, SumOfDigits.calculate(inputNumber));
}

@Test
public void testFail() {
fail("This is a failed test case for parameter " + inputNumber);
}
}

但我无法获得参数方面的输出。以下是我的 TestRunner 类的一个片段:

printDash();
System.out.println("TEST RESULTS");
printDash();
System.out.println("Passed: " + (result.wasSuccessful() ? "YES" : "NO"));
System.out.println("Total Test Cases: " + result.getRunCount());
System.out.print("Successful: " + (result.getRunCount() - result.getFailureCount() - result.getIgnoreCount()));
System.out.print(" Ignored: " + result.getIgnoreCount());
System.out.println(" Failed: " + result.getFailureCount());
System.out.println("Run Time: " + ((double) result.getRunTime() / 1000) + " seconds");
printDash();

这给了我以下输出:

--------------------------------------------------------------------------------
TEST RESULTS
--------------------------------------------------------------------------------
Passed: NO
Total Test Cases: 15
Successful: 10 Ignored: 0 Failed: 5
Run Time: 0.078 seconds
--------------------------------------------------------------------------------

我想要的输出是:

Parameter: 2
Passed: NO
Test Cases: 3
Successful: 2 Ignored: 0 Failed: 1

Parameter: 6
Passed: NO
Test Cases: 3
Successful: 2 Ignored: 0 Failed: 1

Parameter: 19
Passed: NO
Test Cases: 3
Successful: 2 Ignored: 0 Failed: 1

等等。

这可行吗?如果是,如何实现?


更新:我还应该能够打印失败测试用例和通过测试用例的输出。内容如下:

Parameter: 22
Passed: YES
Test Cases: 3
Successful: 3 Ignored: 0 Failed: 0

相关一个旧的issue引发使用 junit-team 添加参数化运行前后的注释在 github 上。

最佳答案

我提出的解决方案(尽管不是最合适的解决方案)是维护与每个参数相关的测试结果的集合。我创建了以下类来维护这些数据:

public class ParameterResult {        
private int success = 0;
private int fail = 0;

public int getSuccess() {
return success;
}
public void addSuccess() {
this.success += 1;
}
public int getFail() {
return fail;
}
public void addFail() {
this.fail += 1;
}
}

以上只是我想出的一个基本例子;您可以添加更多信息,例如失败的测试用例列表、忽略的测试用例数量等。

现在,在测试类中,添加一个静态集合来维护参数方面的测试结果,如下所示:

private static final Map<Integer, ParameterResult> parameterResults = new HashMap<>();

我使用了一个HashMap

每当调用测试类的构造函数时,将 ParameterResult 的对象添加到集合中。

if (!parameterResults.containsKey(inputNumber)) {
ParameterResult curParameterResult = new ParameterResult();
parameterResults.put(inputNumber, curParameterResult);
}

这里,inputNumber 是进行检查的参数。

填充测试结果如下:

@Test
public void testPrimeNumberChecker() {
try {
assertEquals(isPrime, PrimeNumberChecker.validate(inputNumber));
parameterResults.get(inputNumber).addSuccess();
} catch (AssertionError e) {
parameterResults.get(inputNumber).addFail();
throw e;
}
}

在执行完所有测试用例后显示测试结果。

@AfterClass
public static void printResult() {
if (!parameterResults.isEmpty()) {
parameterResults.entrySet().stream().forEach(pR -> {
System.out.println("\nParameter: " + pR.getKey());
System.out.println("\tPassed: " + (pR.getValue().getFail() > 0 ? "NO" : "YES"));
System.out.print("\tTest Cases: " + pR.getValue().getSuccess() + pR.getValue().getFail());
System.out.print(" Successful: " + pR.getValue().getSuccess());
System.out.println(" Failed: " + pR.getValue().getFail());
}
}

我很想听听其他人的意见。主要是,这样做的缺点是什么?以及,是否可以改进?

关于java - 根据参数获取失败的测试用例数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37697014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com