【问题标题】:Unit Tests - Referencing 3.0.0.0 MVC, version actually 4.0.0.0单元测试 - 引用 3.0.0.0 MVC,版本实际上是 4.0.0.0
【发布时间】:2017-12-07 08:59:14
【问题描述】:

我正在使用单元测试 (Nunit) 测试 SendEmail:

// Arrange
var mockDbContext = new Mock<DbContext>();
IService service = new Service(mockDbContext.Object);

// Act
var result = service.SendEmail(string.Empty,1,1);

//Assert
Assert.That(result, Is.Not.Null);
Assert.That(result, Is.InstanceOf<bool>());
Assert.AreEqual(result, false);   

public bool SendEmail(string emailAddress, int mId, int deadline)
{
    try
    {
        dynamic email = new Email("CirculationEmail");
        email.To = emailAddress;
        email.MId = mId;
        email.Deadline = deadline;
        email.Send();

        return true;
    }
    catch (Exception ex)
    {
        Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
        return false;
    }
}

SendEmail 使用邮政。运行测试时出现以下错误。当我调试它时,它甚至在我的 SendEmail 中到达第一个调试点之前就抛出了错误。

System.IO.FileLoadException : Could not load file or assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我将以下内容添加到 app.config 并搜索了我的代码以查看它是否曾经引用过 3.0.0.0,它没有。

<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>
</runtime>

我想知道 MVC 错误版本是否(不知何故)掩盖了另一条错误消息?

【问题讨论】:

  • 您可以检查这是否对您有帮助 stackoverflow.com/questions/80287/…
  • app.config 文件中是否存在针对您的测试程序集的绑定重定向,还是仅针对您的 Web 应用程序项目?

标签: asp.net-mvc unit-testing nunit postal


【解决方案1】:

几个选项:

有几种方法可以找出程序集的加载位置。最好的方法是使用 Sysinternal 的 ProcessMonitor 在错误发生之前查看它正在加载的文件。

如果程序集引用配置为“完全匹配”,请尝试检查您的项目。在您的项目“References”文件夹中选择引用,转到“属性”并将“特定版本”更改为 false。

【讨论】:

    【解决方案2】:

    我只有一次遇到这个问题,我在我正在测试的项目中引用了正确的版本 - 但单元测试项目没有正确的引用。

    确保单元测试项目以及测试项目中的引用正确。

    【讨论】:

      【解决方案3】:

      我有同样的错误。我尝试在单元测试项目中从 NuGet 包管理器更新“System.Web.Mvc”包。但它没有反映出对单元测试项目的引用有任何变化。这是我的解决方案:

      • 我打开主项目引用并双击 “System.Web.Mvc”包在对象浏览器中引出视图。
      • 然后我只是复制了在文件资源管理器中打开的文件的路径。 我在哪里找到“System.Web.Mvc”包的 dll 文件。
      • 我对找到 dll 的单元测试项目执行了相同的过程 旧版本的“System.Web.Mvc”包文件。
      • 我将其替换为“System.Web.Mvc”包的 dll 文件,从 主要项目。

      成功了。虽然这不是升级页面的正确方法,但它很快。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-03
        • 1970-01-01
        • 1970-01-01
        • 2015-03-11
        相关资源
        最近更新 更多