如果之前抛出如何验证方法已达到
How to verify method was reached if throw before
我有下面的方法,当数据库中不存在这样的 user name
时 adds new user to database
。如果 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);
}
这将验证是否抛出了预期的异常并确保执行继续到您的下一次验证。
我有下面的方法,当数据库中不存在这样的 user name
时 adds new user to database
。如果 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);
}
这将验证是否抛出了预期的异常并确保执行继续到您的下一次验证。