2017-08-16 88 views
0

我正在嘗試爲MVC應用程序編寫單元測試。即時通訊試圖測試,如果我的控制器返回正確的視圖名稱。即使設置它後MVC ViewResult.VIewName爲空

這是控制器動作IM測試:

public IActionResult Index(string reportcode) 
{ 
    if(string.IsNullOrEmpty(reportcode)) 
      ReportCode = reportcode; 

    ViewBag.GridSource = GetReportData(reportcode); 
    return View("Index"); 
} 

這是我的單元測試:

[Test] 
public void Index_ReturnCorrectView() 
{ 
    var controller = new HomeController(); 
    var result = controller.Index("COMD") as ViewResult; 
    Assert.AreEqual("Index", result.ViewName); 
} 

我從單元測試得到的錯誤預期「指數」卻得到了空。 我做了很多搜索,大多數答案都說應該在返回視圖時聲明ViewName屬性。我嘗試了相同的,但它不會仍然工作。

謝謝

+0

無關:你可能真的想'如果(string.IsNullOrEmpty(reportcode)!)' – Andrei

+0

是'result'本身不爲空? – Andrei

+0

@Andrei沒有結果是一個有效的ViewResult – 7uner

回答

1

documentation for Controller.View()狀態:

這種方法View類超負荷返回ViewResult對象 具有空VIEWNAME財產。如果您正在編寫針對 控制器操作的單元測試,請考慮 不帶字符串視圖名稱的單元測試的空ViewName屬性。

在運行時,如果ViewName屬性爲空,則使用當前操作 名稱替代ViewName屬性。

所以,當期待一個與當前動作同名的視圖時,我們可以測試它是一個空字符串。

或者,Controller.View(ViewName,Model)方法將設置ViewName。

我控制器的方法

public ActionResult Index() 
    { 
     return View("Index"); 
    } 

測試方法

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

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

     // Assert 
     Assert.IsTrue(result.ViewName == "Index"); 
    } 
+0

Controller.View(字符串)正是OP正在使用 – Andrei

+0

@Andrei OP必須使用像Controller.View(「Index」,「COMD」) –

+0

@PowerStar你好,謝謝你的回覆。我不確定你的意思是什麼Controller.View(「索引」,「COMD」)。這是我應該在索引方法中返回嗎?我沒有看到它是如何不同於我目前的實施,因爲沒有必要返回「COMD」 – 7uner

相關問題