Visual studio NUnit在单独的项目中进行测试,采用相同的解决方案

Visual studio NUnit在单独的项目中进行测试,采用相同的解决方案,visual-studio,visual-studio-2008,nunit,Visual Studio,Visual Studio 2008,Nunit,我有一个包含主项目和使用NUnit的测试项目的解决方案。一切都可以编译,但当我运行NUnit时,在加载测试后,我会得到下面的异常,测试失败。我已经添加了主项目作为参考,在外部工具设置的NUnit参数中有$(ProjectDir)bin/Debug/$(TargetName)$(targetText),初始目录为空 MyMainProjectTests.Database.TestAddDelete: System.BadImageFormatException : Could not loa

我有一个包含主项目和使用NUnit的测试项目的解决方案。一切都可以编译,但当我运行NUnit时,在加载测试后,我会得到下面的异常,测试失败。我已经添加了主项目作为参考,在外部工具设置的NUnit参数中有$(ProjectDir)bin/Debug/$(TargetName)$(targetText),初始目录为空

MyMainProjectTests.Database.TestAddDelete:   
System.BadImageFormatException : Could not load file or assembly 'MyMainProject, 
    Version=1.1.1.0, Culture=neutral, PublicKeyToken=null' or one of its 
    dependencies. An attempt was made to load a program with an incorrect format.
TearDown : System.Reflection.TargetInvocationException : Exception has been 
    thrown by the target of an invocation.
  ----> System.BadImageFormatException : Could not load file or assembly 
    'ChickenPing, Version=1.1.1.0, Culture=neutral, PublicKeyToken=null' or one 
    of its dependencies. An attempt was made to load a program with an incorrect 
    format.
经过几个小时的搜索,我发现VS2005中只有一个bug,它提到了/bin和/obj目录,但提供的答案没有帮助


有什么解决方案吗?

您的主项目是.exe还是.dll?较旧版本的.NET无法引用.exe,因此这可能是问题所在

在任何一种情况下,如果主程序集没有被您的测试程序集访问(例如,在同一目录中),我都会遇到问题。您可以检查这一点,如果没有,可以让VisualStudio将引用的(主)程序集复制到本地目录


“试图加载格式不正确的程序”让我怀疑“缺少程序集”理论是否正确,但如果没有更多信息,这是我能想到的最好的猜测。

您是在x64上运行的吗?如果从x86加载x64位,则会出现该错误,反之亦然。另外,您尝试创建的路径应该是$(TargetPath)宏。

我没有将NUnit设置为外部工具,而是将单元测试项目设置为启动项目。在项目的属性屏幕中,将启动操作设置为“启动外部程序”,并将其指向
nunit.exe
。在开始选项部分,我在“命令行参数”框中指定测试程序集(无需路径)。此时,只需按F5启动NUnit。

使用NUnit-x86.exe而不是NUnit.exe作为运行程序

一个更好的长期解决方案可能是购买ReSharper,其中包括一个更好的NUnit测试运行程序,它完全集成到VisualStudio中。它会自动检测.NET项目类型(x68或x64)。Reformer附带的单元测试只是其中之一。他们的测试跑步者也与他们的系统集成

您可能会发现需要更高版本的Visual Studio才能使用ReSharper。最新版本的作品,你可以免费获得,虽然我知道你可能有问题,从这样一个相当旧的VS2005项目升级一些项目功能


我和ReSharper没有任何关系

只需将测试项目的“平台目标”设置为“x86”。

转到NUnit安装(例如:C:\Program Files(x86)\NUnit 2.6.3\bin)位置并打开NUnit-86.exe。

您能给出一些测试代码(TestAddDelete)的示例吗?是的。你所说的我试图创造的道路是什么意思。我对这个很陌生,你能发布一下你是如何在外部工具中使用NUnit setu的吗?给这个人一个投票权!这真的很好,因为你可以在NUnit GUI运行时逐步完成单元测试。