java - JUnit参数化——为每个参数创建一个实例

标签 java unit-testing junit junit4 parameterized

我很生气地在 Parameterized documentation 中找到“在运行参数化测试类时,会为测试方法和测试数据元素的叉积创建实例。”这意味着构造函数为每个测试运行一次,而不是在运行所有测试之前。我在构造函数中放入了一个昂贵的操作(1-5 秒),现在该操作重复了太多次,不必要地减慢了整个测试套件。该操作只需一次即可为所有测试设置状态。如何使用参数化测试的一个实例运行多个测试?

最佳答案

我会将昂贵的操作移至 @BeforeClass 方法,该方法在整个参数化测试中应该只执行一次。

下面是一个愚蠢的例子:

@RunWith(Parameterized.class)
public class QuickTest {

  private static Object expensiveObject;  
  private final int value;

  @BeforeClass
  public static void before() {
    System.out.println("Before class!");
    expensiveObject = new String("Just joking!");
  }


  @Parameters
  public static Collection<Object[]> data() {
    return Arrays.asList(new Object[][] { { 1 }, { 2 } });
  }      

  public QuickTest(int value) {
    this.value = value;
  }

  @Test
  public void test() {
    System.out.println(String.format("Ran test #%d.", value));
    System.out.println(expensiveObject);
  }
}

将打印:

Before class!
Ran test #1.
Just joking!
Ran test #2.
Just joking!

关于java - JUnit参数化——为每个参数创建一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14429811/

相关文章:

构造函数中的Java随机方法不起作用

java - 通过 List<?> 从 List<subclass> 向上转换为 List<superclass>

java - 简单的 Jdbc 模板。 - 插入和检索 ID

python - 恢复模式下的 etree.XMLParser 是否仍会抛出解析错误?

java - JUnit 示例程序编译但给出运行时错误

java - 单元测试 - junit 和 Mockito。测试 addNewAccount 到数据库,如果我需要删除/删除帐户

java - 你如何在java中返回一个数组对象?

java - 如何将html字符串传递给另一个 Activity webView

java - 我应该模拟我的测试对象与之交互的所有对象吗?

android - AndroidJUnitRunner 和 AndroidJunit4 有什么区别?