gpt4 book ai didi

java - 使用参数化方法进行 JUnit 测试

转载 作者:行者123 更新时间:2023-12-02 00:15:04 24 4
gpt4 key购买 nike

这是一个单元测试类:

MyUnitTestSetup myUnitTestSetup ;

public void setUp(String myParam){
myUnitTestSetup = new MyUnitTestSetup(myParam);
}

@Test
public void test1(){
setUp("value1");
//do some stuff with myParam = "value1";
}

@Test
public void test2(){
setUp("value2");
//do some stuff with myParam = "value2";
}

我想用“value1”执行test1,用“value2”执行test2。参数化单元测试并不方便,因为它们会对“value1”和“value2”执行test1,对“value1”和“value2”执行test2,这不是我想要的。

我想:

  • 每次进行测试时调用设置方法。
  • 使用@Rule注释:

    static String myParam;
    MyUnitTestSetup myUnitTestSetup ;

    @Before
    public void setUp(){
    myUnitTestSetup = new MyUnitTestSetup(myParam);
    }

    @Rule
    public TestRule rule = new TestRule() {
    @Override
    public Statement apply(final Statement base, final Description desc) {
    return new Statement() {
    @Override
    public void evaluate() throws Throwable {
    if(desc.getMethodName().equals("test1"))
    myParam = "value1";
    ...
    }
    };
    }
    }

    @Test
    public void test1(){
    //do some stuff with myParam = "value1";
    }

    @Test
    public void test2(){
    //do some stuff with myParam = "value2";
    }

但我想知道是否有一种更干净、更智能的方法来做到这一点。我本来会想到这样的事情:

MyUnitTestSetup myUnitTestSetup ;

@Before
public void setUp(String myParam){
myUnitTestSetup = new MyUnitTestSetup(myParam);
}

@Test(myParam="value1")
public void test1(){
//do some stuff with myParam = "value1";
}

@Test(myParam="value2")
public void test2(){
//do some stuff with myParam = "value2";
}

有什么想法吗?

最佳答案

我在这里遗漏了什么吗?为什么不将其设置为测试调用中的第一件事或调用设置事情的方法。

@Test
public void test1(){
myParam = "value1"; //set the value?
...
}

@Test
public void test2(){
setupMyParam("value2"); // or this?
...
}

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com