Java 参数化JUnit测试
问题: 在将我的Java 参数化JUnit测试,java,exception,intellij-idea,junit,parameterized,Java,Exception,Intellij Idea,Junit,Parameterized,问题: 在将我的初始化放入实际的@参数后,我不再有NullPointerException,是否有可能@Before之前没有实际调用过?! 有没有一个解决方案,这样我就不必把它放在我的参数中 解决方案: @RunWith(value = Parameterized.class) public class XQTest4Test { static XQueryTestHelper buildTest; static HeaderBodyPayloadTestcase[] array
初始化
放入实际的@参数
后,我不再有NullPointerException,是否有可能@Before之前没有实际调用过?!
有没有一个解决方案,这样我就不必把它放在我的参数中
解决方案:
@RunWith(value = Parameterized.class)
public class XQTest4Test {
static XQueryTestHelper buildTest;
static HeaderBodyPayloadTestcase[] arrayHdrInbPayTestcases;
@Before
public void initialize() throws Exception {
buildTest = new XQueryTestHelper();
buildTest.initialization();
arrayHdrInbPayTestcases = buildTest.getHdrInbPayTestcases();
System.out.println(arrayHdrInbPayTestcases[0].a);
}
@Parameter
public HeaderBodyPayloadTestcase testcase;
@Parameters(name = "{index}: pew")
public static Iterable<? extends HeaderBodyPayloadTestcase> data() throws Exception {
buildTest = new XQueryTestHelper();
buildTest.initialization();
arrayHdrInbPayTestcases = buildTest.getHdrInbPayTestcases();
return Arrays.asList(arrayHdrInbPayTestcases);
}
@Test
public void someTest() throws Exception{
// System.out.println(xq.toString());
System.out.println(testcase.a);
if(testcase.c.contains("HDR")){
assertTrue(new XQueryTester(testcase.a,testcase.b).testHeader(testcase.c,testcase.d));
}
else if (testcase.c.contains("PAY")){
assertTrue(new XQueryTester(testcase.a,testcase.b).testBody(testcase.c,testcase.d));
}
else {
assertTrue(new XQueryTester(testcase.a,testcase.b).testInbound(testcase.c,testcase.d));
}
}
}
@RunWith(值=参数化的.class)
公共类XQTest4Test{
静态XQueryTheLPER构建测试;
静态HeaderBodyPayloadTestcase[]arrayHdrInbPayTestcases;
@以前
public void initialize()引发异常{
buildTest=new XQueryTestHelper();
buildTest.initialization();
arrayHdrInbPayTestcases=buildTest.getHdrInbPayTestcases();
System.out.println(arrayHdrInbPayTestcases[0].a);
}
@参数
公共HeaderBodyPayloadTestcase测试用例;
@参数(name=“{index}:pew”)
公共静态Iterable我认为@Parameter
注释应该对您有所帮助。这样您就不需要带参数的构造函数了
@RunWith(Parameterized.class)
public class XQTest4Test {
static XQueryTestHelper buildTest;
static HeaderBodyPayloadTestcase[] arrayHdrInbPayTestcases;
@Parameter
public HeaderBodyPayloadTestcase testcase;
@Parameters(name = "{index}: pew")
public static Iterable<Object[]> data() {
return Arrays.asList(new HeaderBodyPayloadTestcase[][]{arrayHdrInbPayTestcases});
}
// ...
}
@RunWith(参数化的.class)
公共类XQTest4Test{
静态XQueryTheLPER构建测试;
静态HeaderBodyPayloadTestcase[]arrayHdrInbPayTestcases;
@参数
公共HeaderBodyPayloadTestcase测试用例;
@参数(name=“{index}:pew”)
公共静态可编辑数据(){
返回Arrays.asList(新的HeaderBodyPayloadTestcase[][{arrayHdrInbPayTestcases});
}
// ...
}
并确保标记为@参数
的字段的访问修饰符为公共
我建议您在@Before
或@BeforeClass
方法中执行所有初始化。具体取决于您的逻辑
此功能在上有详细说明,请发布完整的错误message@TimothyTruckledoneI这样做了?@Parameterized.Parameter(0)public HeaderAndBodyTestcase xq;
更改为您的建议,仍然是相同的错误。@Hendrik您删除了构造函数吗?java.lang.NullPointerException at XQTest4Test.someTest(XQTest4Test.java:68)
public HeaderAndBodyTestcase xq;第68行:if(xq.c.contains(“HDR”){