как сделать так, чтобы событие после сборки Visual Studio 2010 nunit всегда выполнялось успешно

У меня есть событие после сборки, которое запускает nunit-console для выполнения некоторых тестов. некоторые из этих тестов терпят неудачу, что, в свою очередь, приводит к сбою события после сборки (код выхода равен количеству ошибок). Я хотел бы, чтобы событие после сборки всегда выполнялось успешно, независимо от кода выхода nunit-console. Как мне это сделать? Я попытался добавить операторы «выход 0» или вызвать пакетный скрипт, который запускает тесты, а затем выполняет «выход 0», но это, похоже, не предотвращает сбой события после сборки (код выхода -1).

ОБНОВЛЕНИЕ: как я упоминал ранее, использование выхода 0 (и выхода /b 0) не сработало. поэтому, к сожалению, хотя ответ, предложенный Хансом Пассантом, работает в этом конкретном сценарии (неудачная копия), он не работает в этом сценарии (неудачный nunit):

"C:\libraries\nunit\nunit-2.5.7-net-2.0\bin\nunit-console.exe" $(TargetPath) /nologo /nodots /timeout=1000 /noshadow
exit /b 0

возможно, я должен упомянуть, что $(TargetPath) относится к местоположению, которое отличается от пути к исполняемому файлу nunit-console (C:\Snaps...\myproject.nunit.dll), но до сих пор это не похоже на причинить какой-либо вред.


person mtijn    schedule 23.12.2011    source источник
comment
Попробуйте запустить пакетный файл из события Post Build, чтобы пакетный файл выполнял NUnit и перехватывал все коды возврата. Мне любопытно, почему вы не хотите знать, провалились ли какие-либо тесты NUnit?   -  person Bernard    schedule 23.12.2011


Ответы (2)


Используйте аргумент /b, чтобы установить уровень ошибки. Например, командная строка события после сборки:

$(ProjectDir)test.cmd

С этим содержанием:

copy foo bar
exit /b 0

Произведен этот вывод:

------ Rebuild All started: Project: ClassLibrary3, Configuration: Debug Any CPU ------
C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe blahblah
Compile complete -- 0 errors, 0 warnings
ClassLibrary3 -> C:\projects\ClassLibrary3\bin\Debug\ClassLibrary3.dll
C:\projects\ClassLibrary3\test.cmd
The system cannot find the file specified.
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
person Hans Passant    schedule 23.12.2011

ну наконец-то дошли руки это исправить. как оказалось, уровни ошибок не имеют ничего общего с этой конкретной проблемой. вместо этого формат текста, который попадает в окно вывода Visual Studio, кажется первостепенным...

неудачные тесты NUnit отображались в окне списка ошибок Visual Studio с описанием элемента, установленным в пространство имен и имя метода сообщения об ошибке NUnit, а в файле — загадочная строка «EXEC». если вы откроете окно вывода, эта же строка «EXEC» также присутствует в начале сообщения об ошибке NUnit. но это не часть исходного сообщения об ошибке NUnit. Я добавил посредника, чтобы увидеть, что происходит, например:

    static void Main(string[] args)
    {
        Console.WriteLine("args: " + string.Join(" ", args));
        Process p = new Process()
        {
            StartInfo = new ProcessStartInfo(@"C:\libraries\nunit\nunit-2.5.7-net-2.0\bin\nunit-console.exe", string.Join(" ", args))
            {
                UseShellExecute = false,
                RedirectStandardOutput = true
            }
        };
        int lineNumber = 0;
        p.OutputDataReceived += (s, e) =>
        {
            //if (!Debugger.IsAttached && !string.IsNullOrWhiteSpace(e.Data) && e.Data.Contains("Test Error"))
            //{
            //    Debugger.Launch();
            //}
            //string line = e.Data;
            string line = string.IsNullOrWhiteSpace(e.Data) ? string.Empty : e.Data.Replace("Test Error", "Test Critical Failure");
            Console.WriteLine("[" + (++lineNumber) + "] " + line);
        };
        p.Start();
        p.BeginOutputReadLine();
        p.WaitForExit();
        Console.WriteLine("nunit exited with code " + p.ExitCode);
        Environment.Exit(0);
    }

Я вызвал эту программу вместо nunit из события после сборки, и, конечно же, при отладке было сообщение об ошибке NUnit без строки «EXEC». кроме того, строка «EXEC» оказалась даже перед номерами строк, которые я теперь добавлял в тестовый вывод. когда я пропустил все строки со строкой «Ошибка теста» или заменил «Ошибка теста» чем-то еще, например «Критический сбой теста», сборка проекта прошла успешно. но когда я добавил следующее к событию проекта после сборки, он снова потерпел неудачу, и описание элемента в окне списка ошибок Visual Studio было установлено на «foo.bar»:

echo Test Error : foo.bar

поэтому либо Visual Studio, либо какое-то расширение, по-видимому, вмешиваются в сборку и приводят к ее сбою, как только в окне вывода Visual Studio появляется строка с форматом «Ошибка теста: bla.bla». Сообщается, что все событие после сборки завершается с ошибкой с кодом выхода -1, даже если последняя команда события после сборки устанавливает для уровня ошибки какое-либо другое значение. теперь, чтобы быть честным, я не уверен, относится ли это к стандартной версии Visual Studio 2010 или некоторому расширению, поэтому на всякий случай это вся моя среда:

Microsoft Visual Studio 2010 версии 10.0.40219.1 SP1Rel Microsoft
.NET Framework версии 4.0.30319 SP1Rel
Установленная версия: Professional

Инструменты разработчика Microsoft Office
Microsoft Visual Basic 2010
Microsoft Visual C# 2010
Microsoft Visual C++ 2010
Microsoft Visual F# 2010
Microsoft Visual Studio 2010 Team Explorer
Microsoft Visual Web Developer 2010< br> Добавить справочный диалог Plus! 1.0
AlignAssignments 1.0
AutoBraceComplete 1.0
ClearCase Search 1.0
Шаблоны Crystal Reports для Microsoft Visual Studio 2010
Devart Code Compare 2.70.3
Document Well 2010 Plus 1.0.10916.0
Microsoft Visual Studio 2010 Professional — ENU с пакетом обновления 1 (KB983509)
Инструменты разработчика Microsoft Visual Studio 2010 SharePoint 10.0.40219
Microsoft.VisualStudio.QuickAccess.Package 1.0
OptionsPageImpl 1.0
PowerCommands для Visual Studio 2010 1.0
QuickFind 1.0
Rational ClearCase
Visual Nunit 1.0
VSCommands 2010 3.8.0.0
FeiLoader
ObjectWizard

Итак, есть обходной путь с использованием посредника, но если есть кто-то, кто знает какой-либо параметр или исправление Visual Studio или расширения, которое решит эту проблему, или лучшую альтернативу моему решению, то я все уши!

ОБНОВЛЕНИЕ: после отключения всех расширений и надстроек проблема сохраняется. это начинает выглядеть как особенность Visual Studio.

person mtijn    schedule 02.01.2012