我有一个 Junit4 测试,其中包含用于参数化测试的运行时异常"should have no parameters"



我正在使用Junit4和JunitParams的外部jar运行一些代码。

据我所知,我的代码设置得很好,导入都是正确的。。。但是我测试中的方法不断抛出运行时异常,因为它似乎忽略了其中的@Parameters注释。

当它达到我正在测试的方法时,它一直在说"java.lang.Exception:方法-----应该没有参数">

我不确定问题是什么,尽管其他人在混合/匹配导入语句等方面遇到了问题。我检查了我的,但这里似乎不是这样。

试车员等级:

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

我发现了一些最终成功的东西-我将@RunWith注释的内部更改为

Parameterized.class

事实证明,我试图将参数传递到@Test注释下的方法中,而不仅仅是StringProcessorTest类的构造函数;我把它们从测试中删除了。它已经警告过我了,但我之前不明白为什么。

当我重新运行它时,它完成时没有出现问题,并且运行了两次。

我认为您有两种选择来解决您的问题:

  1. stringValues()方法中删除@Parameters注释,并将其添加到测试方法中,如下所示:
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());
}

  1. 删除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());
}

最新更新