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

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

Давайте обратим внимание на то, некоторые аргументы, сгенерированные Pex’ом выглядят несколько странно. 🙂 Наверное, было бы неплохо, если бы была возможность прогнать тестируемый метод с этими аргументами по шагам и осмотреть, что происходит в том или ином случае. Как говорится, нет ничего проще! Выделяем интересующий нас тест в левой части окна результатов Pex’а, а в правой части нажимаем кнопку “Save Text…”. На отображение выдается диалоговое окно, приведенное на рисунке ниже:

А в этом окне приведена последовательность шагов, которые Pex сделает при сохранении теста – для начала создаст тестовый проект, затем совершит еще множество мелких действий, после чего, наконец, сгенерирует тест и сохранит его. Нам в данном случае ничего не остается сделать, как только нажать кнопочку “Apply”.  Да, тест, сгенерированный PEx’ом, будет не просто тестом, а т.н. unit test’ом. А что же такое unit test? А unit test – это метод без аргументов, вызывающий тестируемый метод. В том случае если unit test выбрасывает исключение, говорят, что тест не пройден. Если исключение unit test’ом не выбрасывается, то говорят, что тест прошел нормально. Собственно говоря, на приведенном выше рисунке виден текст unit test’а.

Но вернемся к нашей теме. После нажатия кнопки “Apply” на отображение будет выдано еще одно окно:

Никаких объяснений оно не требует, просто определяет место, в котором будет сохранен unit test. Самое лучшее, что можно сделать в данном случае, — это просто нажать кнопку “Ок”.

А теперь загляните в свой Solution Explorer. В нем вы увидите только что сгенерированный тестовый проект:

Итак, тестовый проект сгенерирован, непосредственно тест располагается в файле StringExtensions.Test.Capitalize.g.cs:

[

TestMethod]

[

PexGeneratedBy(typeof(StringExtensionsTest))]

public

void Capitalize06()

{

string s;

s =

this.Capitalize("h");

Assert.AreEqual<string>("H", s);

}

}

}

Теперь нужно научиться прогонять этот тест под отладчиком. Для этого на первой строке тестируемого метода ставим breakpoint, после чего в правой части окна результатов Pex’а нажимаем кнопку “Debug” и… Произошел останов! Обратите внимание, мы отлаживаем не приложение, а метод библиотеки, тем не менее, Pex осуществил запуск приложения-хоста, которое и вызвало наш тестируемый метод, передав ему параметры, с которым тестируемый метод можно отладить. А дальше – дальше дело техники. Думаю, F10 и F11 все помнят!

Однако, есть во всем этом одна неприятность. Хорошо, сейчас тестируется небольшой метод, мы можем сохранить десяток тестов по отдельности. А если метод большой и достаточно сложный, то что делать в этом случае? Понятно, что и на это вопрос можно ответить положительно. Для этого выделяем все тесты в левой части окна результатов (выделим один, а потом “скажем” Ctrl-A”). Левая часть окна исчезла, зато появилась кнопочка “Save…”. Нажимаем ее, видим очередной диалог с перечнем шагов, которые предпримет Pex, и в очередной раз нажмаем кнопку “Apply”. Взглянем опять на файл StringExtensions.Test.Capitalize.g.cs. Очевидно, что в него и были добавлены только что сгенерированные unit test’ы.

Попутно отметим, что эти тесты видны и в Team Test’е. В Visual Studio нажимаем Test->Windows->Test View и получаем окошечко со списком сгенерированных тестов:

Попутно замечу, что, возможно, придется нажать кнопку “Refresh” в этом окне, она вторая слева в toolbar’е этого окна.

В этом окне выбираем все тесты (Ctrl-A) и нажимаем кнопку “Run Selection”. Ну, а результаты запуска тестов можно увидеть в окне результатов Pex’а.

Итак, сейчас мы получили возможность сохранять тесты и прогонять их как пошагово, так и в “автомате”. Что еще нужно разработчику? А разработчику нужно, как минимум, узнать, а какая часть кода проверяется сгенерированными unit test’ами. Но об этом – в следующей заметке.

Реклама


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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s