我有如下方法,当数据库中不存在此类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);
}
第二种测试方法的问题是ApplicationException
为thrown
(这是完全可以预期的,但我真的很想测试AddUserType
是否为not reached
。
是否有可能在抛出异常之前存在?
您可以将测试方法更改为类似的内容;
[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);
}
这将验证是否抛出了预期的异常,并确保执行继续进行下一次验证。