如何解决我有一个带有 RuntimeException 的 Junit4 测试“应该没有参数”用于参数化测试
我正在使用 Junit4 和 JunitParams 的外部 jar 运行一些代码。
据我所知,我的代码设置正确,导入也全部正确……但我的测试方法不断抛出运行时异常,因为它似乎忽略了其中的 @Parameters 注释。>
当它到达我正在测试的方法时,它一直说“java.lang.Exception: Method ----- should have no parameters”
我不确定问题是什么,即使其他人遇到了混合/匹配导入语句等问题。我检查了我的,这里似乎不是这种情况。
测试运行器类:
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类的构造函数;我从被测方法中删除了它们。它已经警告我了,但我不明白为什么更早。
当我重新运行它时,它顺利完成并运行了两次。
,我认为您有两种选择来解决您的问题:
- 从
@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,processor.printReverseString());
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。