gpt4 book ai didi

java - 我可以使用 @RepeatedTest 注释 JUnit5 获得变量值吗

转载 作者:行者123 更新时间:2023-12-02 09:04:25 26 4
gpt4 key购买 nike

我有一个测试用例,其中我以枚举的形式提供了测试数据。喜欢

enum TestTransactions {
TestTransactions(Transaction T1, Transaction T2, String expectedOutput){}
}

在我的测试类中,我必须将其用作:

class Test {
private final static int REPETITION_COUNT = TestTransactions.values().length;

@RepeatedTest(value=REPETITION_COUNT)
private void testAllTransactions(RepetitionInfo info) {
TestTransactions currentTest = TestTransactions.values()[info.getCurrentRepetition()];
logger.info("Executing test for " + currentTest.name());

setExpectationsFor(currentTest);
whenControllerIsCalled();
Assert.assertEquals(currentTest.getExpectedOutput(), result.getBody());
}
}

这里这行@RepeatedTest(value=REPETITION_COUNT)给出了编译错误,指出“属性值必须是常量。”

有什么办法可以实现这一点吗?尽管我也尝试在构造函数和静态 block 内以及声明期间分配 REPETITION_COUNT (声明为final),如本示例所示。

最佳答案

如果我正确理解您的用例,您希望将 @ParameterizedTest@EnumSource 一起使用,而不是 @RepatedTest - 这就是 JUnit5 的方式开箱即用地支持此类用例。

首先,添加对 org.junit.jupiter:junit-jupiter-params 的依赖(它提供对 @ParameterizedTest 的支持),然后:

class Test {
@ParameterizedTest
@EnumSource
void testAllTransactions(TestTransactions currentTest) {
logger.info("Executing test for " + currentTest.name());

setExpectationsFor(currentTest);
whenControllerIsCalled();
Assertions.assertEquals(currentTest.getExpectedOutput(), result.getBody());
}
}

还有 JUnit 5 的旁注:

  • @Test 方法应该是包私有(private)的(无可见性限定符),而不是 private
  • 使用断言而不是断言

关于java - 我可以使用 @RepeatedTest 注释 JUnit5 获得变量值吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59929598/

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