与Nant和Nunit2的问题

时间:2013-11-06 02:13:46

标签: c# nunit nant

我在尝试使用nunit2任务执行测试时遇到此错误

  

执行测试失败。如果您的汇编不是使用NUnit版本2.6.0.12051构建的,那么请确保您已重定向汇编绑定

我的测试项目的nunit版本是2.6.2.12296。

我在我的测试项目配置文件中测试了几个重定向绑定,但没有做到这一点。我知道我可以使用EXEC直接运行nunit.exe而不是使用nunit2任务,但我想让它工作。

更新

这是我当前测试项目的app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
    </assemblyBinding>

    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="nunit.framework" publicKeyToken="96d0234a77" culture="Neutral" />
          <bindingRedirect oldVersion="0.0.0.0-2.6.0.12051" newVersion="2.6.2.12296" />
        </dependentAssembly>
    </assemblyBinding>

  </runtime>
</configuration>

更新2

这是构建文件的相关部分

<nunit2>
  <test 
    assemblyname="D:\[the full path]\UnitTests.dll" 
    appconfig="D:\customTest.config"/>
  <formatter type="Plain"/>
</nunit2>

3 个答案:

答案 0 :(得分:3)

当您使用NAnt NUnit2任务时,如果测试框架的版本与构建NAnt的版本不匹配,则必须告知NAnt NUnit2任务使用绑定重定向。

问题是NUnit测试运行器为每个测试创建一个新的AppDomain,因此您无法使用测试项目的app.config进行绑定重定向。

您必须使用绑定重定向创建自定义配置文件:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="nunit.framework" publicKeyToken="96d0234a77" culture="Neutral" />
      <bindingRedirect oldVersion="0.0.0.0-2.6.2.12051" newVersion="2.6.2.12296" />
    </dependentAssembly>
  </assemblyBinding>
</runtime> 

告诉NUnit2 NAnt任务使用它:

<nunit2>
    <test assemblyname="ProjectName.Tests.dll" appconfig="customTest.config" />
     ...
</nunit2>

-------------- 最后的想法 ------------------------ ------

你的配置是:

<bindingRedirect oldVersion="0.0.0.0-2.6.0.12051" newVersion="2.6.2.12296" />

尝试

<bindingRedirect oldVersion="0.0.0.0-2.6.2.12296" newVersion="2.6.2.12296" />

并仔细检查测试项目的所有外部引用是否在visualstudio属性窗口中为copy local=true

答案 1 :(得分:2)

NUnit documenation

中的说明将<bindingRedirect>添加到.config中
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="nunit.framework" publicKeyToken="96d0234a77" culture="Neutral" />
      <bindingRedirect oldVersion="0.0.0.0-2.6.2.12051" newVersion="2.6.2.12296" />
    </dependentAssembly>
  </assemblyBinding>
</runtime> 

或者使用Nant <exec>,如:

 <exec program="${LibraryPath}\NUnit\2.6.2\nunit-console.exe">
   <arg value="${SourcePath}\ProjectName.Tests\bin\Release\ProjectName.Tests.dll" />
 </exec>

答案 2 :(得分:1)

我遇到了同样的问题。

我的解决方案是将平台从x86更改为Any CPU。 似乎nunit在不同平台上存在问题。

迎接