NUnit在一个单独的项目中测试,同样的解决方案

时间:2009-06-29 13:05:50

标签: visual-studio visual-studio-2008 nunit

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

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中提到/ bin和/ obj目录的一个错误,但提供的答案没有帮助。

任何解决方案?

6 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:11)

使用nunit-x86.exe而不是nunit.exe作为跑步者。

一个更好的长期解决方案可能是购买ReSharper,其中包括一个更好的NUnit测试运行器,它完全集成到Visual Studio中。它会自动检测您的.NET项目类型(x68或x64)。 ReShaper带有tons of other features,其中单元测试只有一个。他们的测试运行器还集成了他们的DotCover code coverage analyser

您可能会发现Visual Studio的更高版本需要使用ReSharper。最新版本与Visual Studio 2013 Community Edition一起使用,您可以免费获得,但我知道您可能会遇到从这样一个相当古老的VS2005项目升级某些项目功能的问题。

我与ReSharper没有任何关系。

答案 2 :(得分:7)

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

答案 3 :(得分:5)

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

答案 4 :(得分:0)

您的主要项目是.exe还是.dll?较旧版本的.NET无法引用.exe,因此可能成为问题。

在任何一种情况下,如果主程序集没有最终到达测试程序集可访问的某个地方(例如,在同一目录中),我会发现问题。您可以通过让Visual Studio将引用的(主)程序集复制到本地目录来检查,如果不这样做的话。

“尝试加载格式不正确的程序。”让我想知道“缺失的集会”理论是否正确,但没有更多的信息,这是我能想到的最好的猜测。

答案 5 :(得分:0)

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