如果之前抛出,如何验证方法

问题描述 投票:1回答:1

我有如下方法,当数据库中不存在此类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。我将其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);
}

第二种测试方法的问题是ApplicationExceptionthrown(这是完全可以预期的,但我真的很想测试AddUserType是否为not reached

是否有可能在抛出异常之前存在?

c# nunit
1个回答
2
投票

您可以将测试方法更改为类似的内容;

[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);
}

这将验证是否抛出了预期的异常,并确保执行继续进行下一次验证。

© www.soinside.com 2019 - 2024. All rights reserved.