Pex: для String.IsNullOrEmpty Pex генерирует только два метода тестирования - PullRequest
3 голосов
/ 19 мая 2011

У меня есть простой метод с одним условием, подобным этому.

if (String.IsNullOrEmpty (FirstName))

{

успех = ложь;

}

возвращение успеха;

Когда я запускаю Pex, он генерирует только один тестовый случай, который присваивает Null свойству FirstName, а другой с присваиванием «\ 0» FirstName.

Почему он не генерирует третий метод, который присваивает string.Empty свойству FirstName?

Ответы [ 3 ]

4 голосов
/ 22 мая 2011

Насколько я понимаю, Pex просто пытается достичь 100% покрытия тестами в коде вашего приложения.Из кода, который вы разместили, потребуется всего два теста для отслеживания всех ветвей этого метода.

  • Строка не пуста или пуста.
  • Строка пуста или пуста.
2 голосов
/ 19 мая 2011

Я предполагаю, что Pex не настроен для проверки внутренних компонентов библиотек .Net, поэтому он не знает, что пустая строка будет специальным значением для функции IsNullOrEmpty. Null и нулевой символ ('\ 0') являются его двумя любимыми вариантами для тестирования строк, если он не в состоянии проверить, как используется строка.

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

1 голос
/ 10 апреля 2012

Как говорит Джошуа Дейл, Пекс пытается создать тесты, которые охватывают как можно больше ветвей кода.Как сказано в первом абзаце Справочного руководства Pex:

При заданном методе [sic] Microsoft Pex генерирует входные данные, которые используют множество различных путей кода.В порядке [sic] слов Microsoft Pex стремится создать набор тестов, обеспечивающий максимальное покрытие кода.

(Как вы можете видеть, этот документ мог бы сделать с некоторымичтение!)

Важно помнить об этом, поэтому Pex будет генерировать тестовые входные данные, предназначенные для выполнения всех ваших ветвей кода, а не генерировать тестовые входные данные с семантическим значением (ожидайте, где это обычно).Важно понимать это и не предполагать, что набор тестов, сгенерированный Pex, означает, что ваши тесты охватили все возможные условия отказа.Он потенциально может охватывать очень немногие из них - тестовые входы предназначены для достижения крайних случаев (например, ноль / нуль-символ), что очевидно, если учесть, что цель состоит в том, чтобы использовать как можно больше ветвей кода.

Pex пытается исследовать ветви кода, которые ваши собственные тесты не обнаруживают.Это дополнение к вашему интеллекту - вы, человек, хорошо разбирающийся в том, что должен делать код, как машина Тьюринга, Пекс хорошо разбирается во всех возможных ветвях кода (хотя часто нуждается в помощи).

...