Как я могу получить код завершения покрытого исполняемого файла из консоли запуска DotCover? - PullRequest
1 голос
/ 28 апреля 2011

Моя организация работает над интеграцией консоли DotCover (описанной здесь и здесь ) в процесс сборки на основе MSBuild с помощью пользовательской задачи MSBuild.

Как и следовало ожидать, мы рассматриваем тесты NUnit над нашими сборочными тестами. Хотя мы вполне довольны результатами покрытия, которые генерирует DotCover, мы обнаружили, что наши тесты теперь могут проваливаться, не вызывая сбой нашей сборки. Один шаг вперед, два шага назад.

DotCover (по крайней мере, так, как мы его запускаем) полностью скрывает результаты покрытого процесса, как вывод на консоль, так и код выхода. Мне бы хотелось, чтобы в этом отношении он вел себя больше как NCover - повторяя весь вывод и код выхода из покрытого процесса.

Кто-нибудь знает, как этого добиться с помощью консоли DotCover? Получение кода завершения покрытого процесса является наиболее важным, поскольку нам необходимо, чтобы наши сборки не работали в случае сбоя теста.

Ответы [ 3 ]

1 голос
/ 19 ноября 2011

Мы используем задачи сообщества MSBuild и MSBuild для сбоя сборки.

Вы можете проанализировать сгенерированный dotCover выходной xml-файл, используя задачу XmlRead MSBuild.CommunityTasks.

<Target Name="DetermineCoverage">
    <Message Text="==================================================" />
    <Message Text="Determine Unit Test Coverage" />

    <XmlRead
        XPath="/Root/@CoveragePercent"
        XmlFileName="dotCoverOutput.xml">
        <Output TaskParameter="Value" PropertyName="CoveragePercent"/>
    </XmlRead>
    <Message Text="==" />
    <Message Text="== Coverage Percentage $(CoveragePercent)" />

    <Error
        Text="Unit Test coverage did not exceed the desired threshold"
        Condition="$(CoveragePercent) &lt; 90" />

    <Message Text="==================================================" />
</Target>
0 голосов
/ 27 августа 2015

Я столкнулся с той же проблемой.

Альтернативный обходной путь - сначала запустить ваши модульные тесты с помощью тестового бегуна вне dotCover.Это предоставит правильные коды возврата.

А затем, на втором этапе, запустите dotCover, чтобы получить результаты покрытия.

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 28 апреля 2011

Поскольку мне быстро понадобился обходной путь, я добавил шаг постобработки, чтобы очистить файл NUnit xml, сгенерированный во время выполнения DotCover, на предмет ошибок тестового набора, и я не смогу выполнить сборку, если обнаружу. Я сделал это с помощью простой пользовательской задачи MSBuild:

public class CheckNUnitResults : Task
{
    [Required]
    public string ResultFile { get; set; }

    public override bool Execute()
    {
        Log.LogMessageFromText("Analyzing nunit results : " + ResultFile, MessageImportance.Normal);
        var failedCases =
            XDocument
                .Load(ResultFile)
                .Descendants("test-case")
                .Where(xe => xe.Attribute("success").Value.Equals("False"));
        var fail = failedCases.Any();
        if (fail)
        {
            Log.LogError("Found test case failures : " +
                         string.Join(", ", failedCases
                                               .Select(xe => xe.Attribute("name").Value)
                                               .ToArray()));
        }
        return !fail;
    }
}

Это вызывается из MSBuild следующим образом:

<CheckNUnitResults ResultFile="YourNUnitResultFile.xml" />

(я вызываю его в цикле над ItemGroup, содержащей мои файлы результатов)

...