如何让我的JUnit测试以随机顺序运行?

nim*_*cap 22 junit

我有测试的经典结构,我有一个不同套件的测试套件,如DatabaseTests,UnitTests等.有时这些套件包含其他套件,如SlowDatabaseTests,FastDatabaseTests等.

我想要的是随机化测试的运行顺序,以便我确保它们不相互依赖.随机化应该在每个级别,如套件应该随机测试类顺序,测试类应该随机测试方法顺序.

如果可以在Eclipse中执行此操作,那将是最好的.

Mic*_*mlk 14

你有一个Sortable,但我看不出你会如何使用它.

您可以扩展BlockJUnit4ClassRunner并让computeTestMethods()返回super.computeTestMethods()的随机副本.然后使用@ RunWith将其设置为要使用的运行器.

例如

package com.stackoverflow.mlk;

import java.util.Collections;

import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.model.InitializationError;

public class RandomBlockJUnit4ClassRunner extends BlockJUnit4ClassRunner {

    public RandomBlockJUnit4ClassRunner(Class<?> klass)
            throws InitializationError {
        super(klass);
    }

    protected java.util.List<org.junit.runners.model.FrameworkMethod> computeTestMethods() {
        java.util.List<org.junit.runners.model.FrameworkMethod> methods = super.computeTestMethods();
        Collections.shuffle(methods);
        return methods;
    }

}
Run Code Online (Sandbox Code Playgroud)

然后

@RunWith(com.stackoverflow.mlk.RandomBlockJUnit4ClassRunner.class)
public class RandomOrder {
    @Test
    public void one() {
    }

    @Test
    public void two() {
    }

    @Test
    public void three() {
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我发现这非常有用,我创建了一个随机化测试和套件的小型Java项目.有关更多信息,请访问其页面:http://randomjunit.sourceforge.net/ (2认同)