我目前遇到的問題是,我們使用IdentityServer3 然後其中我們部分的code,像是ForgotPassword需要自己寫,我們就有幾個Controller,所以目前要幫那些Controller寫單元測試,但是我不熟MVC。我看到一個Controller 裡面有好幾個Functions, 都叫做Index(),但是HTTP的方法不同,回傳的View也不同。其中一個像是HttpGet這樣的,如果我要寫unit test不知道要怎麼測.....
我想要可以測他的邏輯,例如name是有值得時候,應該要傳入正確的值給ViewModel,但是這樣子是不是也是要測試ViewModel,要實際把值從MyViewModel裡面拿出來比對?
另外,因為我有用到Request的值,那這樣我是不是要Mock HTTP Request?
public class MyController: Controller{
[HttpGet]
[Route("")]
[HandleError(View= "Error")]
public ActionResult Index(string name)
{
if(string.IsNullOrWhiteSpace(name)){
name = new LastCookie(Request.GetOwinContext).GetValue();
}
return View("Index", new MyViewModel){
Name = name,
Link = Request.UrlReferrer
}
}
}
public class MyViewModel{
public string Name{get;set;}
public Uri Link{get;set}
}
[TestMethod]
public void Index_Return_ViewModel(){
string name = "name";
var controller = new MyController(foo, bar);
var result = controller.Index(name) as ViewResult;
var viewModel = controller.ViewData.Model as MyViewModel;
Assert.AreEqual("Index", result.ViewName);
}