使用Ant和Junit执行单个测试方法

时间:2015-05-26 13:38:46

标签: java ant jenkins junit

我正在寻找一种方法来运行单个Junit测试方法(不是整个测试,只是通过" -D"参数提供给ant的单个测试方法)以Jenkins兼容的方式。有很多不同的教程(大多数都进入完全不同的方向),我找不到一个真正使用Junit4。*。 (例如,不再有TestCase(String methodName)构造函数......)

我可以使用" -D"解析参数。选择通过蚂蚁,我可以用

启动单个测试用例
Request requestCase = Request.method(Class.forName("testmethod"), Parameter.testCase);
Result result = new JUnitCore().run(requestCase);

但可能因为我经常在TestSuites中运行所有内容,所以Jenkins单独运行单个测试,但没有注册测试已经运行。

tl; dr:使用junit运行单个测试方法(不是整个类)有一个好方法,这样Jenkins可以正确地获取结果吗?

2 个答案:

答案 0 :(得分:1)

该代码不会生成Jenkin的junit插件通常用于发布结果的xml结果文件。使用AntXmlRunListener

可以做到这一点
AntXmlRunListener xmlListener = new AntXmlRunListener();
FileOutputStream reportStream = new FileOutputStream(reportDir + "/TEST-" + className + ".xml");
xmlListener.setOutputStream(reportStream);

JUnitCore junit = new JUnitCore();
junit.addListener(xmlListener);

// ...
// junit.run(requestCase);

xmlListener.setOutputStream(null);
reportStream.close();

Here您将找到使用类似方法的其他答案。

在本地测试它,它应该生成一个带有结果的xml文件。

现在,在Jenkins的工作中,您需要使用适当的正则表达式(类似于此Publish junit results)添加帖子构建操作**/TEST-*.xml以捕获结果。

答案 1 :(得分:0)

在玩了一下之后,我们找到了一个使用反射的正常工作解决方案: 在Junit suite() - 方法:

if (Parameter.testCase != null){  //Parameter contains all parsed parameters
        try {

            Class<?> classGen = Class.forName("package.path" + Parameter.testPlatform.toString());

            Constructor<?> constructor =
                    classGen.getConstructor( new Class[] { String.class } );

            suite.addTest( (Test) constructor.
                    newInstance( new Object[] { Parameter.testCase } ) );
            return suite;
        }
        catch (ClassNotFoundException e) {
            Logger.log("ERROR: Error executing single test" + Parameter.testCase);
            e.printStackTrace(); //the output is actually logged properly
            System.exit(1);
        }
    }

为此,每个Testclass都需要扩展junit.framework.TestCase