Я никогда раньше не использовал AutoMapper, поэтому мне интересно, какие юнит-тесты мне нужно написать для этой конкретной строки кода c:
IEnumerable<UserDetail> userDetails =
this.mapper.Map<IEnumerable<Entities.User>, IEnumerable<UserDetail>>(users);
соответствующая строка в этом Метод:
public IEnumerable<UserDetail> GetUserDetails()
{
var users = this.userData.GetUsers();
//question is about testing this line
IEnumerable<UserDetail> userDetails =
this.mapper.Map<IEnumerable<Entities.User>, IEnumerable<UserDetail>>(users);
return userDetails;
}
. В настоящее время модульный тест предоставляет фиктивный список пользователей для возврата из this.userData.GetUsers()
, а затем проверяет, вывод userDetails
содержит те же данные в this.userData.GetUsers()
Эти первые юнит-тесты выглядят так:
[Test]
public async Task VerifyAutoMapperProfile()
{
//Assert
this.MapperConfig.AssertConfigurationIsValid();
}
[Test]
public async Task UserService_GetUsers_Returns_IEnumerableUserDetails()
{
//Arrange
IList<Entities.User> usersFromData = this.GetMockUsers();
Mock<IUserDataAccess> mockUserData = new Mock<IUserDataAccess>();
mockUserData
.Setup(d => d.GetUsers())
.Returns(usersFromData);
//this loads the same AutoMapper.Profile that the application uses
IMapper mapper = this.MapperConfig.CreateMapper();
var userService = new UserService(mockUserData.Object, mapper);
//Act
var userDetails = userService.GetUserDetails();
//Assert
userDetails.Should().BeAssignableTo<IEnumerable<UserDetail>>();
userDetails.Should().HaveCount(usersFromData.Count);
userDetails.Should().NotContainNulls();
userDetails.Should().OnlyHaveUniqueItems();
userDetails.Should().AllBeOfType<UserDetail>();
foreach (Entities.User user in usersFromData)
{
var userDetail = new UserDetail {FullName = user.FullName, Guid = user.Guid};
userDetails.Should().ContainEquivalentOf(userDetail);
}
}
Итак, вопрос в том, должен ли я добавить какое-либо покрытие в этом тесте для указанной мной строки или я должен создавать отдельные тесты для этой строки? (Я буду создавать больше юнит-тестов для этого метода в целом - но мой вопрос специально задает вопрос о методе IMapper.Map
. Нужно ли мне покрывать ошибки / исключения, генерируемые этим методом? Достаточно ли просто иметь this.MapperConfig.AssertConfigurationIsValid()