c# - xunit 中的异常消息包含参数,因此我的测试失败

标签 c# unit-testing exception xunit

我正在尝试检查我抛出的异常是否给出了正确的错误消息。

我在一个类中有一个方法可以从一个值中撤回(减去)。如果该值小于 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);
}

结果最后包含参数,导致测试失败: enter image description here

似乎实际消息包括它引用的参数。我该如何更正此消息?我应该只将行 (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/

相关文章:

java - 当 Exception 类单独可以处理所有类型的异常时,其他 Exception 类的需求是什么?

c# - 实现泛型的特定案例,而不是从中派生

ruby-on-rails-3 - Rails数据库测试和清除

javascript - 多个提供商 Angular 2 测试床

java - 如何从 RepaintManager 生成异常

java - 在 switch 语句中返回异常,然后抛出被调用的方法

c# - ASP.NET SqlMembership Provider 允许多个用户同名

c# - C#中var的初始化

c# - 使用 async/await 和 TaskCompletionSource 的奇怪堆栈跟踪增长

unit-testing - 在 CakePHP 中的单元测试期间使用不同的电子邮件配置