Поскольку определено, что действие возвращает ActionResult<ListUsersDto>
, а вы возвращаете Ok(users)
, то то, что вы описываете, является намеренным.
Value
будет пустым, поскольку возвращается результат действия. ActionResult<T>
вернуть один или другой. Не оба.
Из-за Ok(users)
вам необходимо извлечь значение из возвращенного результата действия.
//Act
var response = await controller.Get();
//Assert
OkObjectResult result = Assert.IsInstanceOf<OkObjectResult>(response.Result);
//assert the value within the object result.
ListUsersDto dto = Assert.IsInstanceOf<ListUsersDto>(result.Value);
Assert.AreEqual(1, dto.Users.Count);
Все было бы иначе, например, действие было определено по-другому
[HttpGet]
public async Task<ActionResult<ListUsersDto>> Get() {
var users = await _userService.GetAllUsers();
if(users == null || users.Users.Count == 0)
return NoContent(); //Or some other relevant action result
return users;
}
И тест, проверенный, как вы сделали изначально
[Test]
public async Task Get_ReturnsAllUsers() {
//Arrange
var listUsersDto = new ListUsersDto();
listUsersDto.Users.Add(
new UserDto()
{
Id = DEFAULT_TRUCK_ID,
Color = "White",
CreationDate = date,
EditDate = date,
ManufactureYear = date.Year,
ModelYear = date.Year
}
);
_userService.Setup(_ => _.GetAllUsers()).ReturnsAsync(listUsersDto);
var controller = GetController();
//Act
var response = await controller.Get();
//Assert
Assert.AreEqual(1, response.Value.Users.Count);
}
Тогда, поскольку действие вернуло объект результата напрямую, свойство ActionResult<ListUsersDto>.Value
будет заполнено.