2010-12-10 49 views
7

我想使用MvcContrib測試助手來測試MVC3中的控制器方法。MvcContrib TestHelper使用AssertViewRendered時出現奇怪的錯誤

控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

測試:

[TestMethod] 
public void Index() 
{ 
    // Arrange 
    HomeController controller = new HomeController(); 

    // Act 
    ViewResult result = controller.Index() as ViewResult; 

    // Assert 
    result.AssertViewRendered().ForView("Index"); 
} 

錯誤:

Test method Tests.Web.Controllers.HomeControllerTests.Index threw exception: MvcContrib.TestHelper.ActionResultAssertionException: Expected result to be of type ViewResult. It is actually of type ViewResult.

任何想法?

回答

3

我的猜測是你正在使用MVCContrib for MVC2,它使用MVC2 ViewResult。而你正在返回一個MVC3 ViewResult。

你試過編譯MVCContrib對MVC3嗎?

+0

剛試過用MVC2項目一樣,所有工作 – Ali 2010-12-10 15:23:07

+0

@阿里:那你打算怎麼做?回到MVC 2?我也下載了MVC 3 RC 2,並且遇到了同樣的錯誤。 MVC contrib與MVC 3兼容嗎? – 2010-12-11 10:47:13

+0

不確定是否誠實。這是一個個人項目,我正在嘗試使用TDD方法。現在我只是不打算使用MVC contrib測試助手。 – Ali 2010-12-13 11:21:22

1

如果在2012年有人遇到同樣的錯誤,我遇到與MVC4和MvcContrib對MVC3工作相同的問題。

解決方案是下載MvcContrib的源代碼。在MVCContrib.TestHelper項目中刪除對System.Web.Mvc的引用(默認情況下它指向版本3)並添加System.Web.Mvc,但請確保您引用版本4.0.0。

然後重建項目,複製生成的dll文件與pdb(用於步入TestHelper代碼)到您的解決方案並添加對該dll的引用。爲我工作!

+0

這對我來說很有用。添加綁定重定向在VS2012中沒有任何區別,它似乎... – JTech 2012-12-20 21:13:00

+0

我最終用FluentMVCTesting替換了TestHelper。 – trailmax 2012-12-21 00:52:20

7

MVCContrib.TestHelper使用的是較舊版本的MVC。該網站現在確實有一個MVC3版本,但是在我寫這篇MVC4的時候,MVC4的更新MVCContrib.TestHelpers還不存在。

如果不觸及源代碼,您可以使用綁定重定向來修復此問題。將此放在您的測試的app.config:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
      <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

以上的採樣點要求MVC版本1-3全部組件使用4

+0

我剛剛在VS2012的我的測試項目中添加了MvcContrib.Mvc3.TestHelper-ci包。我在測試項目中添加了一個'app.config'文件,並且在這個過程中的某處添加了上述綁定重定向到您的app.config中(我認爲它是NuGet)。無論如何,這並不能解決問題。我仍然得到了「...預期類型'ViewResult',但實際上是類型'ViewResult'」問題。我在VS2012中的解決方案是@trailmax聲明...用ASP.Net MVC 4重新編譯MvcContrib.TestHelper項目。 – JTech 2012-12-20 21:18:38

+0

我對VS12有同樣的結果。我不得不使用新的mvc dll重新編譯測試助手。上面的工作在VS10中。不知道爲什麼它不在VS12中。 – klabranche 2012-12-21 14:00:32

相關問題