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”){