我正在尝试检查我抛出的异常是否给出了正确的错误消息。
我在一个类中有一个方法可以从一个值中撤回(减去)。如果该值小于 0,我将抛出异常。
if (amount < 0)
{
throw new System.ArgumentOutOfRangeException("amount", AmountLessThanZeroMessage);
}
这是我的错误信息:
public const string AmountLessThanZeroMessage = "Amount is less than zero";
但是,当我尝试编写单元测试以查看是否收到正确的消息时,由于参数的原因,它失败了。这是测试:
[Fact]
public void CannotWithdrawLessThanZero()
{
// Arrange
var account = new Account("User", 23);
// Act
account.DepositCash(100);
var thrownException = Assert.Throws<ArgumentOutOfRangeException>(() => account.WithdrawCash(-10));
// Assert
Assert.Equal(Account.AmountLessThanZeroMessage, thrownException.Message);
}
似乎实际消息包括它引用的参数。我该如何更正此消息?我应该只将行 (Parameter 'amount')
添加到预期的字符串中,还是有更好的选择?
最佳答案
您可以创建完全相同的异常并使用其消息属性。喜欢下面的代码
[Fact]
public void CannotWithdrawLessThanZero()
{
// Arrange
var account = new Account("User", 23);
var expectedException = new System.ArgumentOutOfRangeException("amount", AmountLessThanZeroMessage);
// Act
account.DepositCash(100);
var thrownException = Assert.Throws<ArgumentOutOfRangeException>(() => account.WithdrawCash(-10));
// Assert
Assert.Equal(expectedException.Message, thrownException.Message);
}
关于c# - xunit 中的异常消息包含参数,因此我的测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59051433/