Как пройти и потерпеть неудачу в подсчете тестовых случаев в xunit, используя скрипт cake(C# make)

Я пытаюсь использовать скрипт торт для запуска тестовых случаев, написанных в 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 ответа

Решение

Вам нужно будет использовать XUnit2Aliases.XUnit2(IEnumerable , 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, пример источника, больше информации в 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");

Как и большинство тестеров, XUnit возвращает количество неудачных тестов в коде возврата от консоли. Из коробки Cake генерирует исключение и поэтому не может выполнить сборку, когда код возврата инструмента НЕ равен нулю.

Это можно увидеть в тестах XUnit Runner здесь:

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 для преобразования XML-отчета в удобочитаемый HTML-отчет.

Другие вопросы по тегам