Eclipse Junit运行配置,将当前选定的测试类作为arg?

时间:2013-05-08 14:32:22

标签: java eclipse junit

我不想为我的测试用例不断创建相同的调试配置,而是希望能够在我的所有Junit测试中简单地保存一些常用的参数,右键单击特定的测试,然后运行该单个运行配置。 IE 我想要一个单独的调试配置,可以将当前选定的测试用例作为参数,而不是每次在JUnit运行配置中都要求我手动指定它。对话框中我唯一的选项似乎是指定单个测试类或运行项目中的所有测试。因此,Eclipse中充斥着针对我所有测试用例的数十种运行配置。

我希望它不是指定一个特定的测试类,而是指定一个像{{container_loc}或$ {resource_loc}这样的变量,让类在this question中运行。 Eclipse中是否有一个变量指定了我可以放置在对话框中测试类字段中的当前所选Java类?

这有用的一个具体示例是运行Lucene单元测试时。您可以指定许多参数来自定义测试,其中一些参数需要-ea。每次我想在Eclipse中测试Lucene中的特定测试用例时,我必须在Eclipse调试配置对话框中手动设置这些变量: - /。

1 个答案:

答案 0 :(得分:1)

你看过JUnit中的参数化测试吗?这是一个例子:

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)
public class ParamTest {
    @Parameters(name = "{index}: fib({0})={1}")
    public static Iterable<Object[]> data() {
        return Arrays.asList(new Object[][] { 
                 { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }
           });
    }

    private int input;
    private int expected;

    public ParamTest(int input, int expected) {
        this.input = input;
        this.expected = expected;
    }

    @Test
    public void test() {
        Assert.assertEquals(expected, input);
    }
}

如果您只想一次运行一个测试,可以使用私有变量,如下所示:

    public class MultipleTest {
    private int x;
    private int y;

    public void test1(){
        Assert.assertEquals(x, y);
    }
    public void test2(){
        Assert.assertTrue(x  >y);
    }

    public void args1(){
        x=10; y=1;
    }
    public void args2(){
        x=1;y=1;
    }
    public void args3(){
        x=1;y=10;
    }
    @Test
    public void testArgs11(){
        args1();
        test1();
    }
    @Test
    public void testArgs21(){
        args2();
        test1();
    }
    @Test
    public void testArgs31(){
        args3();
        test1();
    }
    @Test
    public void testArgs12(){
        args1();
        test2();
    }
    @Test
    public void testArgs22(){
        args2();
        test2();
    }
    @Test
    public void testArgs32(){
        args3();
        test2();
    }
}