如何使用cake(c#make)脚本在xunit中传递和失败测试用例计数

时间:2016-11-14 09:07:32

标签: c# unit-testing continuous-integration xunit cakebuild

我尝试使用cake脚本运行使用cake脚本在Xunit中编写的测试用例,我需要知道测试用例的数量和失败次数。

#tool "nuget:?package=xunit.runner.console"
var testAssemblies = GetFiles("./src/**/bin/Release/*.Tests.dll");
XUnit2(testAssemblies);

参考:http://www.cakebuild.net/dsl/xunit-v2

有人可以建议如何获得通过和失败的测试用例数吗?

2 个答案:

答案 0 :(得分:11)

您必须使用XUnit2Aliases​.XUnit2(IEnumerable < FilePath >, ​XUnit2Settings) + XmlPeekAliases来阅读XUnit输出。

var testAssemblies = GetFiles("./src/**/bin/Release/*.Tests.dll");
XUnit2(testAssemblies,
     new XUnit2Settings {
        Parallelism = ParallelismOption.All,
        HtmlReport = false,
        NoAppDomain = true,
        XmlReport = true,
        OutputDirectory = "./build"
    });

xml格式为:(XUnit documentationthe example sourcemore information in Reflex

<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="nosetests" tests="1" errors="1" failures="0" skip="0">
    <testcase classname="path_to_test_suite.TestSomething"
              name="test_it" time="0">
        <error type="exceptions.TypeError" message="oops, wrong type">
        Traceback (most recent call last):
        ...
        TypeError: oops, wrong type
        </error>
    </testcase>
</testsuite>

然后,以下代码段应该为您提供信息:

var file = File("./build/report-err.xml");
var failuresCount = XmlPeek(file, "/testsuite/@failures");
var testsCount = XmlPeek(file, "/testsuite/@tests");
var errorsCount = XmlPeek(file, "/testsuite/@errors");
var skipCount = XmlPeek(file, "/testsuite/@skip");

答案 1 :(得分:1)

与大多数测试运行器一样,XUnit从控制台运行器返回返回代码中的失败测试数。开箱即用,Cake会抛出异常,因此当工具的返回码不为零时,构建失败。

这可以在XUnit Runner Tests中看到:

https://github.com/cake-build/cake/blob/08907d1a5d97b66f58c01ae82506280882dcfacc/src/Cake.Common.Tests/Unit/Tools/XUnit/XUnitRunnerTests.cs#L145

因此,为了知道是否:

  

只是在代码级别传递或失败

这是隐含的,无论构建是否成功。我通常使用类似于此的策略:

Task("Tests")
.Does(() =>
{
    var testAssemblies = GetFiles("./src/**/bin/Release/*.Tests.dll");
    XUnit2(testAssemblies,
        new XUnit2Settings {
            Parallelism = ParallelismOption.All,
            HtmlReport = false,
            NoAppDomain = true,
            XmlReport = true,
            OutputDirectory = "./build"
    });
})
.ReportError(exception =>
{
    Information("Some Unit Tests failed...");
    ReportUnit("./build/report-err.xml", "./build/report-err.html");
});

这是利用Cake中的异常处理功能:

http://cakebuild.net/docs/fundamentals/error-handling

发生错误时采取措施。最重要的是,我使用ReportUnit alias将XML报告转换为人类可读的HTML报告。