为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕村225694 2021-07-21 13:05:19
我正在创建一个扩展方法,该方法对对象执行测试以查看它是否具有特定的自定义属性。我想为我的扩展方法创建一个单元测试。如何断言扩展方法中的测试应该失败?[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}基本上,ShouldValidateTheseFieldsdoes 反射并断言它应该在名为“Field”的字段上有一个自定义属性,我需要断言它失败了。
查看完整描述

2 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

创建一个新的自定义异常并在缺少自定义属性时抛出它:


    [Test]

    public void ShouldFailIfEmailAddressAttributeIsMissingFromFieldName()

    {

        //--Arrange

        var model = new { Field = 1 };


        //--Act

        Should.Throw<EmailAddressAttributeNotFoundException>(() => model.ShouldValidateTheseFields(

            new List<FieldValidation>

            {

                new EmailAddressFieldValidation

                {

                    ErrorId = 1,

                    ErrorMessage = "Message",

                    FieldName = nameof(model.Field)

                }

            }));

    }

要检查断言是否失败,您需要捕获断言异常。在这种情况下,由于使用了 Shouldly 框架,因此在扩展方法中抛出了一个 Shouldly.ShouldAssertException:


[Test]

public void ShouldFailIfEmailAddressAttributeHasWrongErrorId()

{


    //--Arrange

    var model = new TestModelTwo();


    //--Act

    Should.Throw<ShouldAssertException>(() => model.ShouldValidateTheseFields(

    new List<FieldValidation>

    {

        new EmailAddressFieldValidation

        {

            ErrorId = 2,

            ErrorMessage = "Message",

            FieldName = nameof(model.Field)

        }

    }));

}

使用类:


public class TestModel

{

    [EmailAddress(1)]

    public string Field { get; set; }

}

扩展方法中的失败断言是 ErrorId.ShouldBe(2) 当它在模型上实际上是 1 时。


查看完整回答
反对 回复 2021-07-31
  • 2 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信