Pex – инструмент для тестирования приложений методом “белого ящика” (часть 4)

Когда Pex генерирует тесты, он генерирует не только обычные unit test’ы, он также создает и параметризированные unit test’ы (Parameterized Unit Test — PUT). В частности, если заглянуть в файл StringExtensionsTest.cs

[

TestClass]

[

PexClass(typeof(StringExtensions))]

[

PexAllowedExceptionFromTypeUnderTest(typeof(ArgumentException), AcceptExceptionSubtypes = true)]

[

PexAllowedExceptionFromTypeUnderTest(typeof(InvalidOperationException))]

public partial class StringExtensionsTest

{

[

PexMethod]

public string Capitalize( string value )

{

string result = StringExtensions.Capitalize( value );

return result;

// TODO: add assertions to method StringExtensionsTest.Capitalize(String)

}

}

Обратите внимание на то, что этот код находится в файле StringExtensionsTest.cs, тогда как все остальные тесты находятся в файле StringExtensionsTest.Capitalize.g.cs. Файл …g.cs никогда не должен редактироваться вручную. Все изменения должны производиться именно в файле StringExtensionsTest.cs.

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

Что ж, напишем следующий метод и добавим его в файл StringExtensionsTest.cs:

[

PexMethod]

public void CapitalizeMaintainsLettersCount( string value )

{

string result = StringExtensions.Capitalize( value );

PexAssert.AreEqual( LettersCount( value ), LettersCount( result ) );

}

private static int LettersCount(string s )

{

return System.Linq.Enumerable.Count( s, char.IsLetter );

}

Теперь кликнем на любом месте в файле StringExtensionsTest.cs, после чего из контекстного меню выберем элемент “Run Pex Explorations”. Pex произведет переформирование списка тестов и после завершения переформирования выдаст диалоговое окно:

Обратим внимание, что в окне TestView нм предлагают произвести обновление. Что ж, нажимаем Ок и переходим в окно Test View:

В верхней части окна можно увидеть еще одно предупреждение о том, что набор тестов изменился. Для обновления набора тестов необходимо нажать на кнопку “Refresh”. После этого список тестов изменится:

После выделения всех методов и нажатия кнопки “Run Selection” (первая кнопка слева в toolbar’е окна Test View) в окне результатов тестов получаем следующее:

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

Приведу два примера.

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

[PexMethod]

public void CapitalizeIsIdempotent(string input)

{

string output = StringExtensions.Capitalize(input);

string output2 = StringExtensions.Capitalize(output);

PexAssert.AreEqual(output, output2);

}

 

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

[PexMethod]

public void CapitalizeReturnsOnlyLettersAndUnderscores(string input)

{

string output = StringExtensions.Capitalize(input);

PexAssert.TrueForAll(output,

c => char.IsLetter(c) || c == ’_’);

}

 

Реклама


Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s