如何在测试类实例中获得当前运行的jUnit测试套件运行器实例?

时间:2018-03-08 18:55:44

标签: java parameters junit4 junit5 junit-runner



我有一个jUnit 4/5项目,我通过测试套件运行我的测试类
我使用 com.github.peterwippermann.junit4.parameterizedsuite.ParameterizedSuite.class runner 作为注释" RunWith()" 在测试套件但我的测试类使用 JUnitPlatform.class runner 具有相同的注释。
由于这个原因,我无法在测试套件中读取 - 在我的测试类中声明参数(@Parameters)。如果我在我的测试类中使用@RunWith(Parameterized.class)运行程序,它工作正常,但我的目标 是在我的测试类中使用junit 5 JUnitPlatform.class运行程序jUnit 4 ParameterizedSuite.class运行器,用于参数化我的测试套件

E.g。我的测试套件:

package TestSuite.Dummy;
//...some imports...

@RunWith(ParameterizedSuite.class)
@SuiteClasses({ 
T5.class
})
public class TestSuite_Dummy_01
{
    public static Object[] parameters = new Object[] {"A", "B", "C"};

    @Parameters(name = "Parameter of suite are {0}")
    public static Object[] params() throws NoSuchMethodException, SecurityException 
    {
       System.out.println(parameters.length);
       System.out.println(parameters.getClass().getTypeName());

       return parameters;
    }

    @Parameter(0)
    public static String myStringParameter;

    public static XYZQA QAE = null;

    public static XYZQA getXYZQA()
    {
       // Create a new XYZQA object
       try
       {
           QAE = new XYZQA();
           System.out.println("QAE created");
           return QAE;
       }
       catch(MalformedURLException e)
       {
           e.printStackTrace();
           return null;
       }
    }

    public static String getParameter()
    {
       System.out.println("Parameter available?" + ParameterContext.isParameterSet());
       return myStringParameter;
    }
}

我的示例测试类:

package Main.Demo;
//...some imports...

@RunWith(JUnitPlatform.class) //is necessary to run jUnit 5 tests with non-junit5-implemented IDEs
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@ExtendWith(ClientDescriptionParameterResolver.class)
public class T5
{    
    public static XYZQA QAE;
    public static String parameters;

    public T5()
    {
        //...
    }

    @BeforeAll
    static void setUpBeforeClass() throws Exception
    {
        QAE = TestSuite_Dummy_01.getXYZQA();
        parameters = TestSuite_Dummy_01.getParameter();
        System.out.println("Parameters from Suite: " + parameters);
    }

    @Test
    public void test01(ClientDescription client)
    {
        //...
    }

    //...
}

问题:
以下代码行:

  

QAE = TestSuite_Dummy_01.getXYZQA(); //将测试套件类的QAE对象导入/使用到当前测试类中   块引用


对我来说工作正常,但它被定义为一个测试套件类" TestSuite_Dummy_01"。但是我的所有测试套件都应该与我的测试类一起使用,而不仅仅是这个测试套件。我的想法是使用测试类的运行测试套件类(runner)的当前实例而不是固定的TestSuite_Dummy_01.class。
我如何获取测试类的当前实例并获得对测试类的相应测试套件类的引用?

0 个答案:

没有答案