【问题标题】:Unit test a SelectList object returned as JsonResult对作为 JsonResult 返回的 SelectList 对象进行单元测试
【发布时间】: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


    【解决方案1】:

    结果中存储的值将是传递给它的类型。

    将期望值转换为期望的类型,如果转换成功则对其进行断言

    //...code removed for brevity
    
    //Act
    var jsonResult = controller.GetJsonObjectsFromOffices(1);
    
    //Assert
    var selectList = jsonResult.Value as SelectList;
    Assert.NotNull(selectList); //<-- cast was successful
    
    var expected = 2;
    var actual = selectList.Count();
    
    Assert.Equal(expected, actual);
    

    【讨论】:

    • 我在答案中修复了它。
    猜你喜欢
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多