0

我正在使用单元测试(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错误版本是否可能(以某种方式)掩盖了另一条错误消息?

4

3 回答 3

0

几个选项:

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

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

于 2013-09-09T12:45:16.727 回答
0

唯一一次我有这个,我在我正在测试的项目中引用了正确的版本 - 但是单元测试项目没有正确的引用。

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

于 2013-09-12T08:42:30.487 回答
0

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

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

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

于 2017-11-15T06:39:09.570 回答