2013-08-07 33 views
0

我使用單元測試(NUnit的)測試SendEmail:單元測試 - 引用3.0.0.0 MVC,版本實際上4.0.0.0

// 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錯誤版本之一蒙上了(不知何故)?

+0

你可以檢查,如果這可以幫助你 http://stackoverflow.com/questions/80287/how-can-i-build-a-dependency-tree-diagram-from-my-net-solution – ali

+0

綁定重定向是否存在於您的測試程序集的app.config文件中,或僅用於您的Web應用程序項目? –

回答

0

幾個選項:

有幾種方法可以找出組件從加載。最好的之一是使用Sysinternal的ProcessMonitor來查看錯誤發生之前它正在加載哪個文件。

如果程序集引用被配置爲「完全匹配」,請嘗試檢查您的項目。在項目的「References」文件夾中選擇引用,轉到「屬性」並將「特定版本」更改爲false。

0

我只有這樣做,我有我正在測試的項目中引用的正確版本 - 但單元測試項目沒有正確的引用。

確保單元測試項目和測試項目中的引用是正確的。

0

我有同樣的錯誤。我嘗試從單元測試項目中的NuGet包管理器更新「System.Web.Mvc」包。但它並未反映對單元測試項目的引用有任何改變。繼承人我的解決方案:

  • 我打開主項目引用和雙點擊 「System.Web.Mvc」包而導致在對象瀏覽器中的視圖。
  • 然後我只是複製文件路徑的文件資源管理器打開它。 其中我找到了「System.Web.Mvc」包的dll文件。
  • 我做了單元測試項目的相同過程,其中發現舊版本的「System.Web.Mvc」包的文件夾 。
  • 我用從 主項目找到的「System.Web.Mvc」包的dll文件替換它。

它工作。雖然這不是升級頁面的正確方法,但它很快。

相關問題