- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 junit5,我想在嵌套类中创建参数化测试。例如:
class CardTest {
@Nested
class Cost {
Stream<Arguments> cards() {
return Stream.of(
Arguments.of(Card.common(0, Color.RED), 0),
/** Other Data **/
Arguments.of(Card.choseColor(), 50)
);
}
@MethodSource("cards")
@ParameterizedTest
void cardCost(Card card, int cost) {
assertThat(card.cost())
.isEqualTo(cost);
}
}
/** Some other nested classes or simple methods **/
}
问题是@MethodSource要求指定的方法必须是static
。但是 Java 不允许在非静态内部类中使用静态方法。如果我创建类 Cost static
那么它不会被 junit
收集。
我应该怎么做才能解决这个问题?
最佳答案
@TestInstance(PER_CLASS)
您可以选择“每个类一个测试实例”模式,使用 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
注释嵌套类:
class ColorTest {
@Nested
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class Inner {
@ParameterizedTest
@MethodSource("colors")
void blue(Color color, int blue) {
Assertions.assertEquals(color.getBlue(), blue);
}
Stream<Arguments> colors() {
return Stream.of(
Arguments.of(Color.BLACK, 0),
Arguments.of(Color.GRAY, 128),
Arguments.of(Color.BLUE, 255)
);
}
}
}
使用这种模式时,每个测试类都会创建一个新的测试实例。
参数提供者
或者您可以从 MethodSource
切换到 ArgumentsProvider
。
我修改了你的示例以查看它是否在本地编译和运行:
class ColorTest {
static class Blues implements ArgumentsProvider {
@Override
public Stream<Arguments> provideArguments(ExtensionContext context) {
return Stream.of(
Arguments.of(Color.BLACK, 0),
Arguments.of(Color.GRAY, 128),
Arguments.of(Color.BLUE, 255)
);
}
}
@Nested
class Inner {
@ParameterizedTest
@ArgumentsSource(Blues.class)
void blue(Color color, int blue) {
Assertions.assertEquals(color.getBlue(), blue);
}
}
}
更多详情请访问 http://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests
关于java - 嵌套类中的 junit5 MethodSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47933755/
有什么方法可以使用@MethodSource来使用其他类中定义的方法吗? 例如下面的代码有效,因为stringProvider方法是在同一类中定义的。 @ParameterizedTest
我正在使用 junit5,我想在嵌套类中创建参数化测试。例如: class CardTest { @Nested class Cost { Stream cards()
我在我的 Junit 测试用例上使用 @MethodSource 注释,以便从另一个方法接收 Map。 @MethodSource 似乎不支持“Map”对象。 这是我收到的错误:org.junit.p
假设我有以下代码: class Testing { String[] text() { String[] text = { "A", "B" }; return
我正在尝试将二维数组传递给参数化测试。一维数组按预期工作,但 junit 在第二个提示“索引 0 处的错误解析参数”。这是不受支持还是我使用了错误的语法? (junit 5.1.0) // This
我想为具有三个输入参数的方法实现参数化 JUnit 测试。我希望测试运行这三个输入参数的所有可能组合的笛卡尔积。为此,我有一个方法,可以生成笛卡尔积并将其存储在 Arraylist 中。如何访问我的测
我正在创建一个排序算法库。每个类都有相同的方法: public static > void sort(T[] array) 我会让所有类都实现一个接口(interface)或扩展一个抽象类,但 sor
预计 将标准 JUnit 5 测试转换为参数化测试,以便使用 @ParamterizedTest 迭代测试用例流。和 @MethodSource Kotlin 中的注释。 观察 @MethodSour
我是一名优秀的程序员,十分优秀!