java—我有一个junit4测试,其中的runtimeexception“应该没有参数”用于参数化测试

llycmphe  于 2021-07-14  发布在  Java
关注(0)|答案(2)|浏览(328)

我正在运行一些使用junit4和外部junitparams jar的代码。
据我所知,我的代码设置正确,导入也正确……但我的测试方法不断抛出运行时异常,因为它似乎忽略了挂在其中的@parameters注解。
当它到达我的测试方法时,它一直说“java.lang.exception:method-----应该没有参数”
我不确定是什么问题,即使其他人遇到了混合/匹配导入语句等问题。我检查了我的,这里似乎不是这样。
测试运行程序类:

package Chapter8.Wrappers.Tests;

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
    public static void main(String[] args){

        Result result = JUnitCore.runClasses(StringProcessorTest.class);

        for(Failure failures: result.getFailures()) {
            System.out.println(failures.toString());
        }
        System.out.println(result.wasSuccessful());
    }
}

还有我的测试类stringprocessortest:

package Chapter8.Wrappers.Tests;

import Chapter8.Wrappers.Challenges.BackwardsString.StringProcessor;
import junitparams.JUnitParamsRunner;
import junitparams.Parameters;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.Arrays;
import java.util.Collection;

@RunWith(JUnitParamsRunner.class)
public class StringProcessorTest {

    private StringProcessor processor;
    private final String expectedResult;
    private final String inputString;

    public StringProcessorTest(String inputString, String expectedResult){
        super();
        this.inputString = inputString;
        this.expectedResult = expectedResult;
    }

    @Before
    public void initialize(){
        processor = new StringProcessor();
    }

    @Parameters
    public static Collection stringValues(){
        return Arrays.asList(new Object[][] { {"HELLO","OLLEH"},
                {"TESTING", "GNITSET"} });
    }

    @Test
    public void objectConstructor_InitializeStringBuilderInside_EqualsPassedString(String inputString, String expectedResult){

        Object input;

        input = inputString;

        processor = new StringProcessor(input);

        Assert.assertEquals(expectedResult, processor.printReverseString());

    }
}

控制台输出:

Chapter8.Wrappers.Tests.StringProcessorTest: java.lang.Exception: Method objectConstructor_InitializeStringBuilderInside_EqualsPassedString should have no parameters
false

Process finished with exit code 0
jk9hmnmh

jk9hmnmh1#

我发现了一些结果——我将@runwith注解的内部更改为

Parameterized.class

结果证明,我试图将参数传递到@test注解下的方法中,而不仅仅是我的stringprocessortest类的构造函数;我把它们从测试方法中去掉了。它已经警告我了,但我不明白为什么早些时候。
当我重新运行它,它完成没有问题,并运行了两次。

nvbavucw

nvbavucw2#

我认为你有两个选择来解决你的问题:
拆下 @Parameters 注解自 stringValues() 方法并将其添加到测试方法中,如下所示:

private List stringValues(){
    return Arrays.asList(new Object[][] { {"HELLO","OLLEH"}, {"TESTING", "GNITSET"} });
}

@Test
@Parameters(method = "stringValues")
public void objectConstructor_InitializeStringBuilderInside_EqualsPassedString(String inputString, String expectedResult) {
    processor = new StringProcessor(inputString);

    Assert.assertEquals(expectedResult, processor.printReverseString());
}


删除 stringValues() 方法并将 @Parameters 直接在测试方法上添加注解:

@Test
@Parameters({ "HELLO, OLLEH", "TESTING, GNITSET" })
public void objectConstructor_InitializeStringBuilderInside_EqualsPassedString(String inputString, String expectedResult) {
    processor = new StringProcessor(inputString);

    Assert.assertEquals(expectedResult, processor.printReverseString());
}

相关问题