首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VS2010 Express中调试Nunit测试

在VS2010 Express中调试Nunit测试
EN

Stack Overflow用户
提问于 2010-06-08 18:34:25
回答 3查看 3.9K关注 0票数 9

我在VS2010 Express中编写了一系列单元测试,测试有时会失败。因为VS的速成版不允许插件运行,所以我不能简单地拆分TestDriven.Net或类似的代码来调试测试。为了解决这个问题,我将我的测试程序集转换成一个控制台应用程序,并使主要方法看起来如下所示:

代码语言:javascript
复制
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" });
  }
}

在理论上,我应该能够运行这个,设置断点在我的测试。如果它成功了,这将是一个可以接受的工作,但我不断得到以下几点:

代码语言:javascript
复制
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-控制台运行良好。我的问题可能是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-03 01:15:13

我使用了您的概念,问题似乎不是直接加载文件,而是依赖关系。

我使用了以下修改代码:

这个错误实际上是定位nunit.core.dll的失败,它位于/lib目录中。

代码语言:javascript
复制
 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),它运行得很好。(发现所需的最小依赖关系应该是很简单的)

在VC# 2010 Express中使用NUnit 2.5.7进行测试(断点工作,但我并没有真正使用任何其他选项)。虽然我相信你可以从它中做出一个可以接受的构建选项。

干杯!

PS -这里的第一篇文章,所以我是有点未经测试的‘代码’块格式化。抱歉提前..。

票数 6
EN

Stack Overflow用户

发布于 2010-09-22 19:10:43

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

代码语言:javascript
复制
    [STAThread]
    static void Main()
    {
        NUnit.Gui.AppEntry.Main(new string[] { Assembly.GetExecutingAssembly().Location });
    }

下面是另一个例子:

代码语言:javascript
复制
...
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" });
        }
    }
}

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

票数 7
EN

Stack Overflow用户

发布于 2012-06-14 19:36:08

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

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

C#项目模板

与Visual集成测试,包括VisualVisualC#速成版本

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

包含启动测试项目所必需的NUnit模块。没有外部依赖。只需使用NUnit测试应用程序模板.创建新项目即可

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3000195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档