Хорошо, у меня есть этот кусок кода:
public TbMtUserDTO RecoverUser(long userId, UpdateTbMtUserDTO updatedData)
{
TbMtUser user = _usersRepository.FindUserById(userId);
if (user == null ||
(updatedData.IdRecSet == "Password" && String.IsNullOrEmpty(updatedData.DsUpdatedPassword)))
{
return null;
}
switch (updatedData.IdRecSet)
{
case "Username":
return _mapper.Map<TbMtUserDTO>(user);
case "Password":
user.DsPassword = PasswordHasher.Hash(updatedData.DsUpdatedPassword);
_usersRepository.SaveChanges();
return _mapper.Map<TbMtUserDTO>(user);
}
throw new InvalidOperationException(
String.Format(RECOVER_USER_ERROR, updatedData.IdRecSet));
}
И пока я писал тестовые случаи для этого куска кода, когда мне нужно было написать тест для одного из «паролей»случай, это то, что я сделал:
[Fact]
public void UpdatesPasswordSuccessfully()
{
string oldPassword = _user.DsPassword;
UpdateTbMtUserDTO updateTbMtUserDto = new UpdateTbMtUserDTO()
{
IdRecSet = "Password",
DsUpdatedPassword = "new_password"
};
_usersRepositoryMock
.Setup(x => x.FindUserById(It.IsAny<long>()))
.Returns(_user);
_mapperMock
.Setup(x => x.Map<TbMtUserDTO>(It.IsAny<TbMtUser>()))
.Returns(new TbMtUserDTO());
TbMtUserDTO userDto = _usersService.RecoverUser(_user.CdUser, updateTbMtUserDto);
_usersRepositoryMock.Verify(x => x.SaveChanges(), Times.Once);
Assert.NotNull(userDto);
Assert.True(oldPassword != _user.DsPassword);
}
Как видите, в нижней части этого теста есть три утверждения.Сначала я проверяю, был ли вызван SaveChanges
, а затем проверяю, что метод действительно что-то возвратил, отсюда утверждение NotNull
и что он действительно изменяет пароль (утверждение True
).
Но яТакое ощущение, что это не правильный способ сделать это.Но в моей голове эти тесты связаны, но я не уверен, стоит ли разделять их на три разных теста.Дело в том, что я должен собрать одинаковые кусочки вместе для трех дел, что, честно говоря, я тоже не думаю, что это хорошая идея.
Что вы, ребята, думаете?Я занимаюсь модульным тестированием уже пару месяцев, так каковы некоторые из ваших практических правил в подобных сценариях?