0

nunit-consoleを実行していくつかのテストを実行するビルド後のイベントがあります。これらのテストの一部は失敗し、ビルド後のイベントが失敗します(終了コードは失敗数と同じです)。nunit-consoleの終了コードに関係なく、ビルド後のイベントを常に成功させたいと思います。どうすればよいですか?'exit 0'ステートメントを追加するか、テストを実行してから'exit 0'を実行するバッチスクリプトを呼び出してみましたが、ビルド後のイベントが失敗するのを防ぐことはできません(終了コード-1)。

更新:前述したように、exit 0(およびexit / b 0)の使用は機能しませんでした。残念ながら、Hans Passantによって提案された回答は、その特定のシナリオ(コピーの失敗)では機能しますが、このシナリオ(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)のパスとは異なる場所を参照していることを言及する必要がありますが、これまでは、害を及ぼす。

4

2 に答える 2

1

/ 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 ==========
于 2011-12-23T15:56:57.463 に答える
1

さて、ようやくこれを修正することになりました。エラーレベルはこの特定の問題とは何の関係もありませんでした。代わりに、VisualStudioの出力ウィンドウに表示されるテキストの形式が最も重要であるように見えます...

失敗した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の代わりにこのプログラムを呼び出しましたが、デバッグ時に文字列「EXEC」のないNUnitエラーメッセージが表示されたことを確認しました。また、文字列'EXEC'は、テスト出力に追加する行番号の前でも表示されました。文字列「TestError」のすべての行をスキップするか、「TestError」を「TestCriticalFailure」のようなものに置き換えると、プロジェクトのビルドは成功しました。しかし、プロジェクトのビルド後のイベントに以下を追加すると、再び失敗し、VisualStudioのエラーリストウィンドウの項目の説明が「foo.bar」に設定されました。

echo Test Error : foo.bar

そのため、Visual Studioまたは一部の拡張機能のいずれかがビルドに介入し、「テストエラー:bla.bla」という形式の文字列がVisualStudioの出力ウィンドウに表示されるとすぐに失敗するように見えます。ビルド後イベントの最後のコマンドでエラーレベルが他の値に設定されている場合でも、ビルド後イベント全体が終了コード-1で失敗すると報告されています。公平を期すために、これが標準のVisual Studio 2010エディションまたは一部の拡張機能に適用されるかどうかはわかりません。安全のために、これが私の環境全体です。

Microsoft VisualStudio2010バージョン10.0.40219.1SP1RelMicrosoft .NETFramework
バージョン4.0.30319SP1Rel
インストール済みバージョン:Professional

MicrosoftOffice開発者ツール
MicrosoftVisualBasic 2010
Microsoft Visual C#2010
Microsoft Visual C ++ 2010
Microsoft Visual F#2010
Microsoft VisualStudio2010チームエクスプローラー
MicrosoftVisualWeb Developer 2010
参照ダイアログの追加プラス!1.0
AlignAssignments 1.0
AutoBraceComplete 1.0
ClearCase Search 1.0
Microsoft Visual
Studio2010Devartコード比較用のCrystalReportsテンプレート2.70.3DocumentWell
2010 Plus 1.0.10916.0
Microsoft Visual Studio 2010 Professional-ENU Service Pack 1(KB983509)
Microsoft Visual Studio 2010 SharePoint Developer Tools 10.0 .40219
Microsoft.VisualStudio.QuickAccess.Package 1.0
OptionsPageImpl 1.0
PowerCommands for Visual Studio 2010 1.0
QuickFind 1.0
Rational ClearCase
Visual Nunit 1.0
VSCommands 2010 3.8.0.0
FeiLoader
ObjectWizard

わかりました。中間者攻撃を使用した回避策がありますが、この問題を解決するVisual Studioや拡張機能の設定や修正、または私の解決策のより良い代替案を知っている人がいる場合は、すべての耳!

更新:すべての拡張機能とアドインを無効にした後も、問題は解決しません。ネイティブのVisualStudioの特性のように見え始めています。

于 2012-01-02T16:01:56.383 に答える