c# - 断言被测系统应该抛出断言异常

标签 c# asp.net unit-testing

我正在创建一个扩展方法,该方法对对象执行测试以查看它是否具有特定的自定义属性。

我想为我的扩展方法创建一个单元测试。我如何断言扩展方法中的测试应该失败?

[Test]
public void ShouldFailIfEmailAttributeMissingFromFieldName()
{
    //--Arrange
    var model = new { Field = 1 };

    //--Act
    model.ShouldValidateTheseFields(new List<FieldValidation>
    {
        new EmailAddressFieldValidation
        {
            ErrorId = 1,
            ErrorMessage = "Message",
            FieldName = nameof(model.Field)
        }
    });
    //--Assert

}

基本上,ShouldValidateTheseFields 进行反射并断言它应该在名为“Field”的字段上有一个自定义属性,我需要断言它失败了。

最佳答案

捕获预期的异常。如果没有抛出则测试失败

[Test]
public void ShouldFailIfEmailAttributeMissingFromFieldName() {
    //--Arrange
    var model = new { Field = 1 };

    //--Act
    try {
        model.ShouldValidateTheseFields(new List<FieldValidation> {
            new EmailAddressFieldValidation {
                ErrorId = 1,
                ErrorMessage = "Message",
                FieldName = nameof(model.Field)
            }
        });
    } catch(MyExpectedException e) {
        return;
    }

    //--Assert
    Assert.Fail();
}

根据所使用的测试框架,应该有一种方法可以让您断言测试的预期异常,这基本上遵循与上面类似的格式。

关于c# - 断言被测系统应该抛出断言异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50747788/

相关文章:

c# - 如何将单元测试项目放在与主项目相同的存储库中?

c# - WCF SQL 插入 GUID 转换错误

javascript - 从标签中删除类

c# - 'Text' 的 'asp:TextBox' 属性不允许子对象

unit-testing - Selenium 服务器未启动。另一个 Selenium 进程可能已经在运行,或者您的 java 版本可能已过时

c - 如何使用 Appveyor 运行自定义 C 单元测试?

c# - 如何在 asp.net 中呈现之前删除 html 注释标记

c# - 如何在 WPF 中启动时打开两个窗口?

c# - VS2010 Framework 3.5 中的 Web 服务中的方法在本地运行时未显示

javascript - 如果 `beforeEach` 中的代码是异步的,如何测试 Jasmine 中的方法?