Повышение удобочитаемости утверждения IsNotNullOrEmpty с помощью утверждений на основе ограничений

В настоящее время я переписываю некоторые модульные тесты, чтобы использовать NUnit 3 вместо NUnit 2, и мне нужно изменить некоторые утверждения на утверждения, основанные на ограничениях. У меня есть следующие утверждения:

Assert.IsNullOrEmpty(result);

Что я изменил на:

Assert.That(result, Is.Null.Or.Empty);

Однако я не совсем доволен удобочитаемостью при утверждении IsNotNullOrEmpty:

Assert.That(result, Is.Not.Null.And.Not.Empty);

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

public static class Text
{
    public static EmptyConstraint IsNullOrEmpty => Is.Null.Or.Empty;

    public static EmptyConstraint IsNotNullOrEmpty => Is.Not.Null.And.Not.Empty;
}

Применение:

Assert.That(result, Text.IsNotNullOrEmpty);

Это обеспечивает лучшую читаемость за счет введения настраиваемого ограничения. Есть ли стандартный способ сделать то же самое утверждение, или мне следует продолжать использовать Is.Not.Null.And.Not.Empty вместо этого?


person Torbjörn Hansson    schedule 07.04.2016    source источник
comment
На этот вопрос можно ответить объективно. Отредактировал тело, чтобы переформулировать вопрос в несубъективных терминах; голосование за повторное открытие.   -  person Sergey Kalinichenko    schedule 02.03.2018


Ответы (1)


Ваше утверждение для Is.Null.Or.Empty прекрасно читается без класса Test. Более того, когда это утверждение не выполняется, вы точно знаете, что произошло: у вас есть допустимый объект string, который не является пустым.

Проблемы, которые я вижу с «деМорганизованной» версией его отрицания, то есть Is.Not.Null.And.Not.Empty, заключаются в том, что он слишком длинный и читается не так хорошо, как Is.Null.Or.Empty.

Однако вместо того, чтобы создавать для него отдельное ограничение, я бы утверждал его части отдельно, т.е.

Assert.That(result, Is.Not.Null);
Assert.That(result, Is.Not.Empty);

Причина, по которой я бы сделал это так, заключается в том, что два условия отказа не перекрываются, т. Е. result может быть null или может быть пустым, но не может быть обоими одновременно. Одно составное утверждение не делает различий между этими двумя ситуациями, так что в конечном итоге вы обращаетесь к отладчику, чтобы увидеть, было ли result null или пустым.

Отдельные утверждения, с другой стороны, точно говорят вам, что происходит, оставаясь при этом очень читабельными. Они «стоят» вам одной дополнительной строки за утверждение; Я думаю, что это разумная цена за получение более точной информации о потенциальных сбоях.

person Sergey Kalinichenko    schedule 07.04.2016