我正在为void方法编写unittest实际上该方法加载了集合 ViewData [“CityList”]方法是
public void PopulateCityCombo() {
IEnumerable<Cities> c= service.GetCities();
ViewData["CityList"] = c.Select(e => new Cities{ ID = e.ID, Name = e.Name});
}
现在我不知道如何使用Moq进行单元测试,因为控制器方法无效并且没有返回数据,任何人都可以告诉我将实现这一点。
答案 0 :(得分:3)
另外,根据您的示例,我会回避在控制器方法中使用ViewData。 ViewData字典方法快速且相当容易实现,但是它可能导致在编译时未捕获的拼写错误和错误。另一种方法是使用ViewModel模式,该模式允许您为需要公开其中的值或内容的特定视图使用强类型类。最终为您提供类型安全和编译时间检查以及智能感知。
切换到ViewModel模式将允许您从控制器调用PopulateCityCombo()方法来填充ViewModel,而ViewModel又将传递给相应的视图。
从那里你需要从你的单元测试中将一个模拟服务层注入你的控制器构造函数中。
// arrange
var mock = new Mock<servicelayer>();
mock.Setup(x=>x.GetCities()).Returns(expectedData);
var controller = new YourController(mock.Object);
// act
var result = controller.ControllerMethod() as ViewResult;
var resultData = (YourViewModel)result.ViewData.Model;
// assert
// Your assertions