在jUnit测试中将参数传递给@Before设置

Nei*_*eil 6 java junit unit-testing

有什么方法可以避免在每次测试开始时都没有固定参数100的情况下调用populateRandomData()方法。我需要在执行每个测试之前调用相同的方法来设置数据,但是我需要更改测试数据条目的数量例如每种情况下为100。

public class Tester
{

   @Before
    public void setUp() {
        populateRandomData(100)
    }

    @Test
    public void testMethod() {

    }

    private void populateRandomData(n){
        //n times insert random data in table.
    }
}
Run Code Online (Sandbox Code Playgroud)

OO7*_*OO7 4

您可以创建参数化 JUnit 测试,它允许您添加要在单元测试用例中传递的参数数量。查看示例教程创建参数化测试用例

或者

@Rule,在测试方法上使用此注释来参数化规则的执行使其更加有用。取自JUnit 4.7 @Rules

编辑 :

使用@Rule的示例:

下面的类允许您初始化将在测试方法中使用的 num 变量的不同值

import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;

public class Test1 implements TestRule {

    private final int   num;

    public Test1(int num) {
        this.num = num;
    }

    public int getNum() {
        return num;
    }

    public class Test1Statement extends Statement {
        private final Statement statement;

        public Test1Statement(Statement statement, int num) {
            this.statement = statement;
        }

        @Override
        public void evaluate() throws Throwable {
            statement.evaluate();
        }
    }

    @Override
    public Statement apply(Statement statement, Description description) {
        return new Test1Statement(statement, num);
    }
}
Run Code Online (Sandbox Code Playgroud)

下面的类是实际的测试用例类。它包含JUnit 测试用例和测试方法中 num 变量的设置值。

import org.junit.Rule;
import org.junit.Test;

public class RuleNumberTester {

    @Rule
    public Test1    test    = null;

    @Rule
    public Test1    test1   = null;

    @Test
    public void num1Test() {
        test = new Test1(111);
        System.out.println("Num 1 : " + test.getNum());
    }

    @Test
    public void num2Test() {
        test1 = new Test1(222);
        System.out.println("Num 2 : " + test1.getNum());
    }
}
Run Code Online (Sandbox Code Playgroud)

输出 :

测试用例已成功执行并显示在控制台上的测试方法中初始化的 num 变量的值。

Num 1 : 111
Num 2 : 222
Run Code Online (Sandbox Code Playgroud)