2011-12-23 151 views
0

我有一個運行nunit-console執行某些測試的構建後事件。其中一些測試失敗,這反過來導致構建後事件失敗(退出代碼等於失敗計數)。無論nunit-console的退出代碼如何,我都希望發佈構建事件成功。我該怎麼做呢?我曾嘗試添加'exit 0'語句或調用運行測試的批處理腳本,然後'退出0',但似乎並未阻止後構建事件失敗(退出代碼-1)。如何使Visual Studio 2010 nunit構建後事件成功,總是有

更新:正如我前面提到的,使用出口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控制檯可執行文件路徑不同的位置(C:\ Snaps ... \ myproject.nunit.dll),但到目前爲止似乎沒有造成任何傷害。

+0

嘗試從Post Build事件中執行批處理文件,並讓該批處理文件執行NUnit並捕獲任何返回代碼。我很好奇你爲什麼不想知道NUnit測試是否失敗? – Bernard 2011-12-23 15:55:17

回答

1

好,終於得到全面修復此。事實證明,錯誤級別與這個特定問題無關。相反,最終在Visual Studio輸出窗口中出現的文本格式似乎是最重要的...

失敗的NUnit測試顯示在Visual Studio錯誤列表窗口中,其中的項目描述設置爲命名空間和NUnit錯誤消息的方法名稱以及設置爲隱含字符串'EXEC'的文件。如果在NUnit錯誤消息的開始處打開「輸出」窗口,同樣的字符串'EXEC'也出現。但它不是原始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」也出現了。當我用字符串'Test Error'跳過所有行時,或者用'Test Critical Failure'等其他內容代替'Test Error'時,項目的構建成功。但是當我添加了以下到它再次失敗項目的生成後事件和項目在Visual Studio錯誤列表窗口中的描述被設置爲「foo.bar」:

echo Test Error : foo.bar 

所以無論是視覺Studio或某個擴展似乎會干涉構建,並在Visual Studio輸出窗口中顯示格式爲「測試錯誤:bla.bla」的字符串時使其失敗。據報道整個構建後事件失敗,退出代碼爲-1,即使生成後事件的最後一個命令將errorlevel設置爲某個其他值。現在是公平的,我不知道這是否適用於標準的Visual Studio 2010版或一些擴展,使只要是安全的,這是我的整個環境:

微軟的Visual Studio 2010版本10.0.40219。1 SP1Rel微軟
.NET Framework版本4.0.30319 SP1Rel
安裝的版本:專業

Microsoft Office開發人員工具
的Microsoft Visual Basic 2010
的Microsoft Visual C#2010
微軟的Visual C++ 2010
的Microsoft Visual F# 2010
Microsoft Visual Studio 2010團隊資源管理器
Microsoft Visual Web Developer 2010
添加引用對話框P LU的! 1.0
AlignAssignments 1.0
AutoBraceComplete 1.0
ClearCase中搜索1.0
的Crystal Reports模板用於Microsoft Visual Studio 2010
Devart代碼比較2.70.3
文檔好2010加1.0.10916.0
微軟的Visual Studio 2010專業版 - ENU Service Pack 1的 (KB983509)
微軟的Visual Studio 2010的SharePoint開發工具10.0.40219
Microsoft.VisualStudio.QuickAccess.Package 1.0
OptionsPageImpl 1.0
PowerCommands爲Visual Studio 2010 1.0
快速查找1.0
Rational ClearCase的
視覺NUnit的1.0
VSCommands 2010 3.8.0.0
FeiLoader
ObjectWizard

好了,所以有使用一種解決方法中間人,但如果有人知道一些Visual Studio或擴展設置或修復可以解決這個問題,或者是我的解決方案的更好替代方案,那麼我都是耳朵!

更新:禁用所有擴展和加載項後,問題仍然存在。它開始看起來像一個本地的Visual Studio的特點。

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 ========== 
相關問題