JUnitParamsRunner无法解析

问题描述 投票:0回答:1

我正在尝试使用 Eclipse IDE 来测试 JUnitParamsRunner,但不知何故无法解析 JUnitParamsRunner。我目前正在使用 JDK 21 和 JUnit 5。

@Parameters
无法解析为类型,同样适用于
@RunWith(JUnitParamsRunner.class)

这是我的 JUnit 测试代码

package application;
import junitparams.JUnitParamsRunner;
import junitparams.Parameters;

import static junitparams.JUnitParamsRunner.$;

import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;

@RunWith(JUnitParamsRunner.class)
public class BasicParameterizedDemo {

    @Test
    public void testAddTwoNumbersV1() {
        VariousMethodsClass vmc = new VariousMethodsClass();
        int result = vmc.addTwoNumbers(10, 15);
        assertEquals(25, result);
    }
    
    @Test
    public void testAddTwoNumbersV2() {
        VariousMethodsClass vmc = new VariousMethodsClass();
        int result = vmc.addTwoNumbers(-50, 10);
        assertEquals(-40, result);
    }
    
    @Test
    public void testAddTwoNumbersV3() {
        VariousMethodsClass vmc = new VariousMethodsClass();
        int result = vmc.addTwoNumbers(30, 100);
        assertEquals(130, result);
    }

    @Test
    @Parameters({"10, 15, 25","-50, 10, -40","30, 100, 130"})
    public void paramTestAddTwoNumbersV1(int num1, int num2, int expectedSum) {
        VariousMethodsClass vmc = new VariousMethodsClass();
        int result = vmc.addTwoNumbers(num1, num2);
        assertEquals(expectedSum, result);
    }   
    
    private Object[] getNumbersToAdd() {
        
        return new Object[] {
            new Object[] {10, 15, 25},
            new Object[] {-50, 10, -40},
            new Object[] {30, 100, 130}
        };
    }
    
    @Test
    @Parameters(method = "getNumbersToAdd")
    public void paramTestAddTwoNumbersV2(int num1, int num2, int expectedSum) {
        VariousMethodsClass vmc = new VariousMethodsClass();
        int result = vmc.addTwoNumbers(num1, num2);
        assertEquals(expectedSum, result);
    }
    
    @Test
    @Parameters
    public void paramTestV3(int num1, int num2, int expectedSum){
        VariousMethodsClass vmc = new VariousMethodsClass();
        assertEquals(expectedSum,vmc.addTwoNumbers(num1, num2));
    }
    
    private Object[] parametersForParamTestV3(){
        return new Object[] {
                new Object[] {10, 15, 25},
                new Object[] {-50, 10, -40},
                new Object[] {30, 100, 130}
        };
    }
    
    @Test
    @Parameters(method = "getNumbersToAdd_V2")
    public void paramTestV4(int num1, int num2, int expectedSum){
        VariousMethodsClass vmc = new VariousMethodsClass();
        assertEquals(expectedSum, vmc.addTwoNumbers(num1, num2));
    }
    
    private Object[] getNumbersToAdd_V2(){
        return $(
                $(10, 15, 25),
                $(-50, 10, -40),
                $(30, 100, 130)
        );
    }
}```
java eclipse junit test-runner
1个回答
0
投票

您的导入(

org.junit.Test
org.junit.runner.RunWith
)来自 JUnit 4 (https://github.com/junit-team/junit4/wiki/Getting-started),并且 JUnit 4 本身不支持参数化测试。对于 JUnit 4,有一个单独的包 JUnitParams,您没有将其导入到项目中。

如果您想使用 JUnit 5,您需要首先导入正确的

Test
注释 (https://junit.org/junit5/docs/current/user-guide/#writing-tests):

import org.junit.jupiter.api.Test;

并且您需要更改参数化测试以使用本机 JUnit 5 参数化测试支持(https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests):

import org.junit.jupiter.params.ParameterizedTest

    @ParameterizedTest
    @CsvSource({"10, 15, 25","-50, 10, -40","30, 100, 130"})
    public void paramTestAddTwoNumbersV1(int num1, int num2, int expectedSum) {
        VariousMethodsClass vmc = new VariousMethodsClass();
        int result = vmc.addTwoNumbers(num1, num2);
        assertEquals(expectedSum, result);
    }   
 
    private Object[] getNumbersToAdd() {
        return new Object[] {
            new Object[] {10, 15, 25},
            new Object[] {-50, 10, -40},
            new Object[] {30, 100, 130}
        };
    }

    @ParameterizedTest
    @MethodSource("getNumbersToAdd")
    public void paramTestAddTwoNumbersV2(int num1, int num2, int expectedSum) {
        VariousMethodsClass vmc = new VariousMethodsClass();
        int result = vmc.addTwoNumbers(num1, num2);
        assertEquals(expectedSum, result);
    }

    @ParameterizedTest
    @MethodSource
    public void paramTestV3(int num1, int num2, int expectedSum){
        VariousMethodsClass vmc = new VariousMethodsClass();
        assertEquals(expectedSum,vmc.addTwoNumbers(num1, num2));
    }

    private Object[] parametersForParamTestV3(){
        return new Object[] {
            new Object[] {10, 15, 25},
            new Object[] {-50, 10, -40},
            new Object[] {30, 100, 130}
        };
    }

我省略了最后一个示例,因为 JUnit 5 不支持

$()
来写入数组。

© www.soinside.com 2019 - 2024. All rights reserved.