Утверждение, что тестируемая система должна выдать исключение подтверждения - PullRequest
0 голосов
/ 07 июня 2018

Я создаю метод расширения, который выполняет тест объекта, чтобы определить, имеет ли он определенный пользовательский атрибут.

Я хочу создать модульный тест для моего метода расширения.Как я могу утверждать, что тест в методе расширения должен завершиться неудачей?

[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 делает отражение и утверждает, что у него должен быть собственный атрибут в поле с именем «Поле», и мне нужноутверждать, что это не удалось.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Создайте новое пользовательское исключение и вызовите его, если в нем отсутствует пользовательский атрибут:

    [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)
                }
            }));
    }

Чтобы проверить, не выполнено ли утверждение, необходимо перехватить исключение Assertion.В этом случае, поскольку используется структураlyly, это исключение mustly.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 в модели.

0 голосов
/ 07 июня 2018

Поймать ожидаемое исключение.Если ничего не брошено, тест не пройден

[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();
}

В зависимости от используемой тестовой среды, у вас должен быть способ заявить об ожидаемых исключениях для теста, который в основном будет следовать аналогичному формату, описанному выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...