我在不同的类中有以下几种方法:
@ParameterizedTest
@MethodSource("com.myapp.AppleProvider#getApplesDependingOnConditions")
public void testSomething(Apple apple) {
SomeContainer.getInstance().setApple(apple)
// ...
}
问题是我无法避免以下内容的复制/重复
name
自变量SomeContainer.getInstance().setApple(apple)
我尝试使用扩展点-BeforeTestExecutionCallback
和BeforeEachCallback
,但是它们似乎没有能力获取被调用的参数。
根据https://github.com/junit-team/junit5/issues/1139和https://github.com/junit-team/junit5/issues/944,无法访问从扩展点传递给测试的参数,并且参数化测试不适用于BeforeEach
回调。
所以我基本上是在寻找任何解决方法,以便我的测试看起来像这样:
@MyAwesomeTest
public void testSomething() {
// ...
}
@MyAwesomeTest
在上面封装了两个注释。
我已经找到的东西:
displayname
,method
或tags
。如果我将参数传递给每个测试方法(尽管这是非常不希望的),则我可以依靠displayname
,因为它将反映传递给方法调用的参数的特定参数。
我试图找出是否还有其他方法无需在每个方法中添加参数。答案 0 :(得分:1)
我认为您可以通过欺骗获得大部分途径:
public static Stream<String> apples() {
return com.myapp.AppleProvider
.getApplesDependingOnConditions()
.stream()
.peek(apple -> SomeContainer.getInstance().setApple(apple))
.map(apple -> { /* convert to name string */ })
}
@ParameterizedTest
@MethodSource("apples")
public void testSomething(String name) {
// ...
}