我有一个如下所示的 JUnit 测试:
private final User user1;
private final User user2;
public UserTest(User user1, User user2) {
this.user1 = user1;
this.user2 = user2;
}
@Parameterized.Parameters
public static Collection<Object[]> userData() {
return Arrays.asList(new Object[][] {
{ new User("Tim", "Burton", "tim.burton"),
new User("tim", "burton", "timothy.burton") },
{ new User("Vincent", "van Gogh", "vincent.van.gogh"),
new User("vincent", "van-gogh", "vincent.vangogh") } });
}
@Test
public void testPositive() {
checkMatching(user1, user2);
}
现在所有测试都成功了,但我想为否定测试创建第二个@Parameterized.Parameters 列表。新方法应如下所示:
@Test
public void testNegative() {
checkFalseMatching(wrongUser1, wrongUser2);
}
是否可以使用特定于方法的参数?我将使用我已经为 testPositive() 方法创建的参数和为 testNegative() 方法创建的第二个参数列表。
我该怎么做?我可以为我的参数或类似的东西使用“范围”吗?
最佳答案
这里有几个选项。首先在构造函数中传入 3 或 4 个参数...
public UserTest(User equalUser1, User equalUser2,
User notEqualUser1, User notEqualUser2);
另一种选择是使用@Enclosed 运行并将不同的参数集/测试分离到单独的内部类中。无论如何,这通常是一个很好的做法,因为如果您混合使用参数化测试和非参数化测试,您不希望多次运行非参数化测试。
另一种选择是使用 Theories 并使用 assumeThat 方法来检查参数是否在特定的集合中。
关于java - 使用不同的参数运行参数化的 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22474315/