在VS2010 Express中调试Nunit测试

时间:2010-06-08 18:34:25

标签: visual-studio unit-testing nunit

我在VS2010 Express中编写了一系列单元测试,测试测试有时会失败。由于VS的快速版本不允许插件运行,我不能简单地启动TestDriven.Net或等效的并调试测试。为了尝试解决这个问题,我已将测试程序集转换为控制台应用程序,并使主方法看起来像这样:

class CrappyHackToDebugUnitTestInVSExpress
{
  public static void Main()
  {
     AppDomain.CurrentDomain.ExecuteAssemblyByName(
          @"C:\Program Files\NUnit 2.5.5\bin\net-2.0\nunit-console.exe",
          new [] { Assembly.GetExecutingAssembly().Location, "/framework:4.0" });
  }
}

理论上我应该能够运行它,在我的测试中设置断点。 如果它有效,这将是一个可以接受的工作,但我一直得到以下内容:

FileLoadException
Could not load file or assembly 'C:\\Program Files\\NUnit 2.5.5\\bin\\net-2.0\\nunit-console.exe' 
or one of its dependencies. The given assembly name or codebase was invalid. 
(Exception from HRESULT: 0x80131047)

现在该文件存在,并且在手动运行时,nunit-console运行正常。可能是我的问题?

3 个答案:

答案 0 :(得分:7)

基本上,您需要将程序集转换为Windows窗体应用程序,添加对 nunit-gui-runner.dll 程序集的引用,并将Main方法更改为如下所示:

    [STAThread]
    static void Main()
    {
        NUnit.Gui.AppEntry.Main(new string[] { Assembly.GetExecutingAssembly().Location });
    }

这是另一个例子:

...
using NUnit.Gui;

namespace __libs
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            NUnit.Gui.AppEntry.Main(new string[] { @"C:\test\bin\Debug\test.exe" });
        }
    }
}

这将允许您进入某些测试,但对红绿色循环不是很好,所以您只想在调试时使用它,而不是在其他情况下。

答案 1 :(得分:6)

我玩了你的概念,看来问题不是直接来自加载文件,而是来自依赖项。

我使用了以下修改过的代码:

错误实际上是找不到/ lib目录中的nunit.core.dll。

 try
        {
            String NUnitPath = @"C:\Program Files\NUnit 2.5.7\bin\net-2.0\nunit-console.exe";

            AssemblyName asmName = System.Reflection.AssemblyName.GetAssemblyName(NUnitPath);

            AppDomain.CurrentDomain.ExecuteAssemblyByName(asmName, new[] { Assembly.GetExecutingAssembly().Location, "/framework:4.0" });

        }
        catch (Exception ex)
        {
            Trace.WriteLine(ex.Message);
            Trace.WriteLine(ex.StackTrace);
        }

(我喜欢获取System.Reflection.AssemblyName,因为你可以检查并看到所有内容都与原始文件路径相符。)

快速批量复制(xcopy nunit。*。dll)到我的测试项目的调试目录中,它运行得很好。 (发现所需的最小依赖性应该是微不足道的)

使用NUnit 2.5.7在VC#2010 Express中测试(断点有效,但我没有真正使用任何其他选项。)虽然我确信你可以从中创建一个可通过的构建选项。

干杯!

PS - 首先发布在这里,所以我有点未经测试,因为格式化'代码'块。提前抱歉..

答案 2 :(得分:2)

尝试在VS C#express中调试单元测试时遇到了类似的问题。很难让它正常工作,但后来我发现了这个项目模板。在C#Express中完美运行!

http://visualstudiogallery.msdn.microsoft.com/b8a7a8fa-9f5a-4b9b-8e8b-8839a4364f26?SRC=VSIDE

  

C#项目模板

     

使用Visual Studio进行集成测试,包括Visual C#Express   版本

     

自包含NUnit控制台运行程序。允许编写测试夹具和   测试,只需按F5即可从Visual Studio运行(支持测试   调试),或者Ctrl-F5自由运行,并在控制台窗口中显示结果。在   测试失败的情况通过哔哔声表示。

     

包含启动测试项目的基本NUnit模块。没有外在的   依赖。使用NUnit Test Application简单地创建新项目   模板。