Как проверить, был ли достигнут метод, если выбрасывать раньше - PullRequest
1 голос
/ 27 марта 2020

У меня есть метод, описанный ниже, который adds new user to database, когда таких user name не существует в базе данных. Если user name существует, то throws custom exception, следовательно, метод addUserType не достигнут.

public void CreateUserType(UserType userType)
{
    if (userType == null) throw new ApplicationException("UserType object cannot be null");

    if (_bottleClientQuery.IsUserTypeExist(userType.Name)) throw new ApplicationException("Such user type name already exist");
    _bottleClientRepository.AddUserType(userType);
}

Мои методы тестирования такие, как показано ниже:

Этот метод правильно дает ожидаемый результат:

[Test]
public void CreateUserType_UserTypeExists_ThrowsApplicationException()
{
       UserQuery.Setup(uow => uow.IsUserTypeExist(It.IsAny<string>())).Returns(true);

       Assert.Throws<Exceptions.ApplicationException>(() => CreateClientService.CreateUserType(new UserType()));
}

Тем не менее, в этом методе я хочу проверить, AddUserType was reached или нет. I setup это как IsUserTypeExist returns true, что означает user name exist, поэтому AddUserType не будет достигнуто.

[Test]
public void CreateUserType_UserTypeExists_AddUserTypeRepositoryNotReached()
{
       UserQuery.Setup(uow => uow.IsUserTypeExist(It.IsAny<string>())).Returns(true);

        CreateClientService.CreateUserType(new UserType());

        UserRepository.Verify(uow => uow.AddUserType(It.IsAny<UserType>()),Times.Never);
}

Проблема со вторым методом проверки состоит в том, что ApplicationException составляет thrown (это вполне нормально и ожидаемо) но мне бы очень хотелось проверить, было ли AddUserType not reached.

Возможно ли, когда до этого было выброшенное исключение?

1 Ответ

2 голосов
/ 27 марта 2020

Вы можете изменить свой метод тестирования на что-то вроде этого;

[Test]
public void CreateUserType_UserTypeExists_AddUserTypeRepositoryNotReached()
{
    UserQuery.Setup(uow => uow.IsUserTypeExist(It.IsAny<string>())).Returns(true);

    Assert.Throws<ApplicationException>(() => CreateClientService.CreateUserType(new UserType()));

    UserRepository.Verify(uow => uow.AddUserType(It.IsAny<UserType>()),Times.Never);
}

Это будет одновременно проверять, что выбрасывается ожидаемое исключение, и гарантирует, что выполнение продолжается до следующей проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...