【发布时间】:2018-03-14 14:42:36
【问题描述】:
我正在努力测试以下方法:
public JsonResult GetJsonObjectsFromOffices(int siteId)
{
IEnumerable<Office> officeList;
officeList = repository.Offices
.Where(o => o.SiteID == siteId)
.OrderBy(o => o.Name);
return Json(new SelectList(officeList, "OfficeID", "Name"));
}
使用 Moq 和 xUnit,我有以下测试
//Arrange
Mock<IFormRepository> mockRepo = new Mock<IFormRepository>();
var mockUserMgr = GetMockUserManager();
var userValid = new CustomUserValidator();
var passwordValid = new CustomPasswordValidator();
var passwordHash = new PasswordHasher<AppUser>();
mockRepo.Setup(m => m.Offices).Returns(new Office[]
{
new Office {OfficeID = 2, SiteID = 2, Name = "Bravo"},
new Office {OfficeID = 1, SiteID = 1, Name = "Alpha"},
new Office {OfficeID = 3, SiteID = 1, Name = "Charlie"}
}.AsQueryable<Office>());
AdminController controller = new AdminController(mockUserMgr.Object, userValid, passwordValid, passwordHash, mockRepo.Object);
//Act
var jsonObj = controller.GetJsonObjectsFromOffices(1);
//'Unexpected character encountered while parsing value: M. Path '', line 0, position 0.' error on line below
//var selectList = JsonConvert.DeserializeObject(jsonObj.Value.ToString());
测试的 Assert 部分的目标是验证是否返回了正确数量的列表项(即两个项目对应于 SiteID = 1)。
jsonObj 是一个JsonResult 类型,其值为{Microsoft.Mvc.Rendering.SelectList}。在SelectList 中,生成了正确的Items,但我不知道如何访问它们来计数
【问题讨论】:
标签: c# unit-testing asp.net-core moq xunit