【发布时间】:2014-05-29 21:35:00
【问题描述】:
下面是方法代码:-
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Product_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<ProductViewModel> products)
{
if (products != null && ModelState.IsValid)
{
foreach (var product in products)
{
ProductDto target = ProductService.GetProduct(product.productId);
DateTime now = DateTime.Now;
if (target != null)
{
CategoryDto dto = new CategoryDto
{
ChangeDate = now,
CreateDate = now,
FKChangedBy = 1,
FKCreatedBy = 1,
FKPhoneTypeID = 2, phone.SelectedTelephoneType),
};
ProductService.UpdateProduct(dto);
}
}
}
return Json(ModelState.ToDataSourceResult());
}
在上述方法中,ProductService 是该方法的依赖项。它在循环中触发。我正在模拟我的两个依赖项方法“GetProduct”和“UpdateProduct”。但是当我在模拟它时(例如,GetProduct) ,所以当该方法执行时,它总是返回 null 这就是为什么其他部分:-
target != null
不执行。谁能建议我测试它的方法?另外我如何测试循环调用的依赖项?
下面是单元测试方法:-
[TestMethod]
public void Product_Update_PostTest_Test()
{
//Act
Kendo.Mvc.UI.DataSourceRequest request = new Kendo.Mvc.UI.DataSourceRequest();
var ID = 1;
//mock the dependencies
_productServiceMock.Setup(x => x.GetProduct(ID)).Returns(_productDto);
_productServiceMock.Setup(x => x.UpdateProduct(_categoryDto));
//Arrange
var actual = _productController.Product_Update(request, _productViewModelList) as JsonResult;
//Assert
Assert.IsNotNull(actual);
Assert.IsInstanceOfType(actual, typeof(JsonResult));
Assert.IsTrue(_productController.ModelState.IsValid);
Assert.AreEqual(null, ((Kendo.Mvc.UI.DataSourceResult)(actual.Data)));
}
【问题讨论】:
-
如何在控制器中实例化 productService?
标签: c# asp.net-mvc unit-testing moq