2011-12-23 117 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 ========== 
相关问题