下面是我的场景:
我正在使用一个MOQMVC4.0项目,它有一个存储库(正如您所期望的),并试图将.NET /xUnit测试库实现为一个.NET单元测试项目。
我已经走了这么远:
MVC控制器
private IHOLService _service;
public PolicyController(IHOLService service)
{
_service = service;
}
public ActionResult Index()
{
var policies = _service.GetAllPolicies(100, 0).ToList();
return View(policies);
}单元测试类
[Fact]
public void GetPolicies()
{
// Arrange
var mockService = new Mock<IHOLService>();
List<Policy> policy = new List<Policy>()
mockService.Setup(cr => cr.GetAllPolicies(10, 0)).Returns(policy);
var controller = new PolicyController(mockService.Object);
// policy here contains 0 results.
// Act
var result = (ViewResult)controller.Index();
var model = result.ViewData.Model; // equals 0.
// Assert
var listCategories = Assert.IsAssignableFrom<List<Policy>>(result.ViewData.Model);
// listCategories.Count equals 0 results.
Assert.Equal(10, listCategories.Count); // Thus always fails
}我的问题是,当直接调用Controller时,一切正常,加载100个策略。
但是,当我运行测试时,会加载0种产品,我猜这可能是模拟调用的问题,这可能与服务初始化有关。有没有人有过这样的经历,并能提供建议?
此外,我是否正确地测试了我的服务,而不是存储在数据层上的存储库?
提前谢谢。
发布于 2012-11-19 09:57:20
在测试代码中,将policy初始化为空列表,然后告诉模拟服务返回这个空列表。要制定测试加载策略,需要将一些策略实例放入policy列表中。
我会写一个类似于这样的测试:
[Fact]
public void GetPolicies()
{
// Arrange
var mockService = new Mock<IHOLService>();
Policy expectedPolicy = new Policy(); // substitute for the real way you construct these
List<Policy> policy = new List<Policy>() { expectedPolicy };
mockService.Setup(cr => cr.GetAllPolicies(10, 0)).Returns(policy);
// Act
var result = (ViewResult)controller.Index();
var model = result.ViewData.Model; // equals 0.
// Assert
var listCategories = Assert.IsAssignableFrom<List<Policy>>(result.ViewData.Model);
Assert.Equal(expectedPolicy, listCategories.First());
}但是,这确实取决于您试图进行单元测试的代码的哪个方面。根据我所看到的,这个测试只是确认您正在按预期存储策略对象。您可以为依赖于策略实例本身的任何逻辑编写进一步的测试。
https://stackoverflow.com/questions/13450870
复制相似问题