java - 使用不同的参数运行参数化的 JUnit 测试

标签 java parameters junit annotations scope

我有一个如下所示的 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 方法来检查参数是否在特定的集合中。

Example Theory with assumeThat

关于java - 使用不同的参数运行参数化的 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22474315/

相关文章:

c# - 由 C# 参数通过引用而不是值传递引起的动画问题,但是在哪里?

java - 静态模拟不起作用

java - Android java更新Android KeyStore中的证书和私钥

java - 多种类型的Java列表是否可能

java - 当它说你可以使用 eclipse 时,我该如何使用 eclipse 来构建这个应用程序? sinch.com/tutorials/android-video-calling

javascript - 这段 JavaScript 代码如何对这些数字进行排序?

java - 如何从java中的文件中获取魔数(Magic Number)

c++ - 使用方法返回值作为参数c++

java - 如何运行给定包的所有 JUnit 测试?

android - 如何使用 ParameterResolver 在 JUnit 5 中注入(inject)多个扩展值