下面是我的方法的代码:-
[HttpPost]
public ActionResult Index(productViewModel model)
{
if (model != null)
{
return PartialView("_ProductGrid", GetProduct(model));
}
else
{
return RedirectToAction("Index", "Product");
}
}
下面是单元测试方法的代码(在C#,MVC中):-
[TestMethod]
public void Index_WithModel_PostTest()
{
//Arrange
ProductController controller = new ProductController();
var model = new productViewModel()
{
Name="product1",
Description="desc"
};
//Act
PartialViewResult actual = controller.Index(model) as PartialViewResult;
if (actual != null)
{
var viewmodel = (productViewModel)((ViewResultBase)(actual)).Model;
int matches = _productService.GetDeals("", model.Description).Count +
_productService.GetInsurance("", model.Description).Count +
_productService.GetCategory("", model.Description).Count;
//Assert
Assert.IsNotNull(actual);
Assert.IsInstanceOfType(actual, typeof(PartialViewResult));
Assert.IsInstanceOfType(viewmodel, typeof(productViewModel));
Assert.AreEqual("_ProductGrid", actual.ViewName);
Assert.AreEqual(matches, viewmodel.Products.Count());
}
}
您可以在该方法的以下部分看到,我正在从所有 3 种方法中获取Products
。但是所有这 3 种方法都是ProductService
依赖关系。我想知道我应该mock
这种情况吗?或者我可以用其他方式做?我想Assert
匹配变量和actual.Product.Count
的count
。
我认为单元测试的本质是利用关注点分离的优势。U 应该使用 moq 创建一个由创建的存储库访问的模拟数据,并在控制器中调用该存储库,然后将其传递给单元测试。关注点分离和单元测试的本质是能够分别测试每一层。浏览最小起订量