теория_7 (1035102), страница 2

Файл №1035102 теория_7 (Методичка и инструкции на ЛР №8) 2 страницатеория_7 (1035102) страница 22017-12-22СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

{

richTextBox1.Text += "Тест не пройден\n\n";

}

}

catch (Exception ex)

{

richTextBox1.Text += "Перехвачено исключение: " +

ex.ToString() + "\nТест не пройден.\n";

}

try

{

richTextBox1.Text += "Test Case 2\n";

richTextBox1.Text += "Входные данные: a= -2850800078, b = 3000000000\n";

richTextBox1.Text += "Ожидаемый результат: res = 0 && error =

\"Error 06\"\n";

int res = CalcClass.Add(-2850800078, 3000000000);

string error = CalcClass.lastError;

richTextBox1.Text += "Код ошибки: " + error + "\n";

richTextBox1.Text += "Получившийся результат: " + "res = " +

res.ToString() + " error = " + error.ToString() + "\n";

if (res == 0 && error == "Error 06")

{

richTextBox1.Text += "Тест пройден\n\n";

}

else

{

richTextBox1.Text += "Тест не пройден\n\n";

}

}

catch (Exception ex)

{

richTextBox1.Text += "Перехвачено исключение: " +

ex.ToString() + "\nТест не пройден.\n";

}

try

{

richTextBox1.Text += "Test Case 3\n(повторный тест)";

richTextBox1.Text += "Входные данные: a= 78508, b = -304\n";

richTextBox1.Text += "Ожидаемый результат: res = 78204 &&

error = \"\"" + "\n";

int res = CalcClass.Add(78508, -304);

string error = CalcClass.lastError;

richTextBox1.Text += "Код ошибки: " + error + "\n";

richTextBox1.Text += "Получившийся результат: " + "res = " +

res.ToString() + " error = " + error.ToString() + "\n";

if (res == 78204 && error == "")

{

richTextBox1.Text += "Тест пройден\n\n";

}

else

{

richTextBox1.Text += "Тест не пройден\n\n";

}

}

catch (Exception ex)

{

richTextBox1.Text += "Перехвачено исключение: " +

ex.ToString() + "\nТест не пройден.\n";

}

Пример 21.1.

Результат:

Test Case 1

Входные данные: a= 78508, b = -304

Ожидаемый результат: res = 78204 && error = ""

Код ошибки:

Получившийся результат: res = 78204 error =

Тест пройден

Test Case 2

Входные данные: a= -2850800078, b = 3000000000

Ожидаемый результат: res = 0 && error = "Error 06"

Код ошибки: Error 06

Получившийся результат: res = 0 error = Error 06

Тест пройден

Test Case 3

(повторный тест)Входные данные: a= 78508, b = -304

Ожидаемый результат: res = 78204 && error = ""

Код ошибки: Error 06

Получившийся результат: res = 78204 error = Error 06

Тест не пройден

Как видно, несмотря на то, что третий тест операции сложения должен быть выполнен, он не проходит, хотя по первому тесту видно, что сложение работает правильно, а значение lastError точно такое же, что и во втором тесте. Это может свидетельствовать, например, о том, что при вызове метода Add в начале своей работы не очищается поле _lastError. Проведем тестирование всех функций:

try

{

richTextBox1.Text += "Test Case 2\n";

richTextBox1.Text += "Входные данные: a= -2850800078, b = 3000000000\n";

richTextBox1.Text += "Ожидаемый результат: res = 0 && error =

\"Error 06\"\n";

int res = CalcClass.Add(-2850800078, 3000000000);

string error = CalcClass.lastError;

richTextBox1.Text += "Код ошибки: " + error + "\n";

richTextBox1.Text += "Получившийся результат: " + "res = " +

res.ToString() + " error = " + error.ToString() + "\n";

if (res == 0 && error == "Error 06")

{

richTextBox1.Text += "Тест пройден\n\n";

}

else

{

richTextBox1.Text += "Тест не пройден\n\n";

}

}

catch (Exception ex)

{

richTextBox1.Text += "Перехвачено исключение: " +

ex.ToString() + "\nТест не пройден.\n";

}

try

{

richTextBox1.Text += "Test Case 3\n(повторный тест)";

richTextBox1.Text += "Входные данные: a= 78508, b = -304\n";

richTextBox1.Text += "Ожидаемый результат: res = 78204 &&

error = \"\"" + "\n";

int res = CalcClass.Add(78508, -304);

string error = CalcClass.lastError;

richTextBox1.Text += "Код ошибки: " + error + "\n";

richTextBox1.Text += "Получившийся результат: " + "res = " +

res.ToString() + " error = " + error.ToString() + "\n";

if (res == 78204 && error == "")

{

richTextBox1.Text += "Тест пройден\n\n";

}

else

{

richTextBox1.Text += "Тест не пройден\n\n";

}

}

catch (Exception ex)

{

richTextBox1.Text += "Перехвачено исключение: " +

ex.ToString() + "\nТест не пройден.\n";

}

try

{

richTextBox1.Text += "Test Case 4 - проверяем вычитание на корректных данных";

richTextBox1.Text += "Входные данные: a= 78508, b = -304\n";

richTextBox1.Text += "Ожидаемый результат: res = 78812 &&

error = \"\"" + "\n";

int res = CalcClass.Sub(78508, -304);

string error = CalcClass.lastError;

richTextBox1.Text += "Код ошибки: " + error + "\n";

richTextBox1.Text += "Получившийся результат: " + "res = " +

res.ToString() + " error = " + error.ToString() + "\n";

if (res == 78508 && error == "")

{

richTextBox1.Text += "Тест пройден\n\n";

}

else

{

richTextBox1.Text += "Тест не пройден\n\n";

}

}

catch (Exception ex)

{

richTextBox1.Text += "Перехвачено исключение: " +

ex.ToString() + "\nТест не пройден.\n";

}

try

{

richTextBox1.Text += "Test Case 5 - проверяем произведение на корректных данных";

richTextBox1.Text += "Входные данные: a= 78508, b = -304\n";

richTextBox1.Text += "Ожидаемый результат: res = 23866432 &&

error = \"\"" + "\n";

int res = CalcClass.Mult(78508, -304);

string error = CalcClass.lastError;

richTextBox1.Text += "Код ошибки: " + error + "\n";

richTextBox1.Text += "Получившийся результат: " + "res = " +

res.ToString() + " error = " + error.ToString() + "\n";

if (res == 23866432 && error == "")

{

richTextBox1.Text += "Тест пройден\n\n";

}

else

{

richTextBox1.Text += "Тест не пройден\n\n";

}

}

catch (Exception ex)

{

richTextBox1.Text += "Перехвачено исключение: " +

ex.ToString() + "\nТест не пройден.\n";

}

Пример 21.2.

Результат

Test Case 2

Входные данные: a= -2850800078, b = 3000000000

Ожидаемый результат: res = 0 && error = "Error 06"

Код ошибки: Error 06

Получившийся результат: res = 0 error = Error 06

Тест пройден

Test Case 3

(повторный тест) Входные данные: a= 78508, b = -304

Ожидаемый результат: res = 78204 && error = ""

Код ошибки: Error 06

Получившийся результат: res = 78204 error = Error 06

Тест не пройден

Test Case 4 — проверяем вычитание на корректных данных

Входные данные: a= 78508, b = -304

Ожидаемый результат: res = 78812 && error = ""

Код ошибки: Error 06

Получившийся результат: res = 78812 error = Error 06

Тест не пройден

Test Case 5 — проверяем произведение на корректных данных

Входные данные: a= 78508, b = -304

Ожидаемый результат: res = 23866432 && error = ""

Код ошибки: Error 06

Получившийся результат: res = -23866432 error = Error 06

Тест не пройден

Мы видим, что ни один из методов не очищает поле _lastError. Это может быть либо ошибкой проектирования, либо неправильной реализацией свойства lastError. Можно либо отправить на доработку все методы и функциональные требования, указав в них, что методы должны перед началом работы очищать свойство lastError, либо доработать свойство следующим образом:

public static string lastError

{

get

{

string temp = _lastError;

_lastError = "";

return temp;

}

}

Таким образом, после любого чтения этой переменной, её значение снова будет равняться пустой строке.

Замечание. Несмотря на кажущуюся "притянутость" этого примера, он очень характерен. Можно вернуться к 5 семинару и удалить строки в тестовом модуле, очищающие значение _lastError. При запуске тестов третий тест вместо перехвата исключения сообщит, что метод закончил работу с кодом ошибки 3. Причина как раз в том, что после выполнения теста 2 значение _lastError не было очищено. Это еще раз свидетельствует о том, что тестам надо созавать корректное тестовое окружение. Дальше будет приведен еще один пример неправильного построения тестового окружения.

Рассмотренный пример является довольно простым, и ошибка будет легко выявлена при тестировании. В четвертом семинаре, при написании тестового драйвера для метода RunEstimate(), мы подключали сборку My.dll:

System.IO.BinaryReader reader = new System.IO.BinaryReader

(new System.IO.FileStream(Application.StartupPath +

+ "\\My.dll", System.IO.FileMode.Open,

System.IO.FileAccess.Read));

Byte[] asmBytes = new Byte[reader.BaseStream.Length];

reader.Read(asmBytes, 0, (Int32) reader.BaseStream.Length);

reader.Close();

reader = null;

System.Reflection.Assembly assm =

System.Reflection.Assembly.Load(asmBytes);

Может показаться, что мы выполняем лишние действия, и вместо всех этих строк кода легче применить метод System.Reflection.Assembly.LoadFile, который сразу подключит необходимую сборку по пути библиотеки.

Замечание. В Framework 2.0 метод LoadFile() объявлен как устаревший.

Дальше мы можем проводить сколько угодно тестов методов класса AnalaizerClass.

Но если нам понадобится поменять заглушку класса CalcClass (например, на ту, которая выводит на экран какие-то дополнительные сведения), то мы получим ошибку access denied, т.к. сборка уже загружена и используется процессом, и перекомпилировать её не получится.

Это другая проблема регрессионного тестирования. Здесь уже ошибка не в тестируемой программе, а в самом построении тестов и тестового окружения. Как было сказано во вступлении, нужно либо для каждого теста заново проводить инициализацию тестового окружения, либо объединять тесты в группы с общей инициализацией, но следя за тем, чтобы тесты не запускались по отдельности.

21.3. Упорядоченные тесты (ordered tests) в MVSTE

Замечание. Подробнее об упорядоченных тестах можно почитать по адресу http://msdn2.microsoft.com/en-us/library/ms182629.aspx

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

Замечание. Упорядоченный тест может содержать тесты любого типа кроме нагрузочных тестов. Ещё одной особенностью упорядоченного теста является то, что, если мы запустим его удаленно или из командной строки, будет показано предупреждение о том, что, чтобы запустить тест, все ручные тесты, которые содержатся в нем, будут временно из него удалены.

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

Рассмотрим сначала создание упорядоченного теста.

Для начала откроем BaseCalculator, с которым мы работали на 5-ом и 6-ом семинарах. Он уже содержит тесты.

Добавим в тестовый проект упорядоченный тест. Для этого в меню Test выберем New Test. В появившемся диалоговом окне Add New Test выбираем Ordered Test. В поле Test Name введем название теста, например, OrderedTest.orderedtest, а в пункте Add to Test Project выберем наш тестовый проект BaseCalculator.Test. Для добавления теста в проект нажимаем OK. (рис.21.1)

Характеристики

Тип файла
Документ
Размер
320,5 Kb
Тип материала
Высшее учебное заведение

Список файлов лабораторной работы

Методичка и инструкции на ЛР №8
Инструкции
Задание_1
01sem-giveaway
Спецификация на программу Калькулятор.doc
Задание_2
02sem-giveaway
+Ее___ _кв_кЕ _  и_е__№_.doc
-_и__Еа _ _б_п__Еб_а _Е жЕ_____ак_и.doc
BaseCalculator.exe
02sem-soft
BaseCalculatorNew
BaseCalculator
Properties
AssemblyInfo.cs
Resources.Designer.cs
Resources.resx
Settings.Designer.cs
Settings.settings
bin
Debug
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
Release
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
obj
Debug
Refactor
TempPE
Properties.Resources.Designer.cs.dll
Задание_3
03sem-soft
Dll
CalcClass.dll
Program
TestDriver
TestDriver
Properties
AssemblyInfo.cs
Resources.Designer.cs
Resources.resx
Settings.Designer.cs
Settings.settings
bin
Debug
AnalaizerClass.cs
CalcClass.dll
My.dll
TestDriver.exe
TestDriver.pdb
TestDriver.vshost.exe
obj
Debug
Refactor
TempPE
ResolveAssemblyReference.cache
TestDriver.MainForm.resources
TestDriver.Properties.Resources.resources
TestDriver.csproj.GenerateResource.Cache
TestDriver.exe
TestDriver.pdb
TestDriver.csproj.FileList.txt
Задание_4
04sem-soft
Dll
AnalaizerClass.dll
CalcClass.dll
Program
TestDriver
TestDriver
Properties
AssemblyInfo.cs
Resources.Designer.cs
Resources.resx
Settings.Designer.cs
Settings.settings
bin
Debug
AnalaizerClass.cs
CalcClass.dll
My.dll
TestDriver.exe
TestDriver.pdb
TestDriver.vshost.exe
obj
Debug
Refactor
TempPE
ResolveAssemblyReference.cache
TestDriver.MainForm.resources
TestDriver.Properties.Resources.resources
TestDriver.csproj.GenerateResource.Cache
TestDriver.exe
TestDriver.pdb
Задание_5
05sem-soft
BaseCalculator
BaseCalculator
Properties
AssemblyInfo.cs
Resources.Designer.cs
Resources.resx
Settings.Designer.cs
Settings.settings
bin
Debug
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
Release
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
obj
Debug
Refactor
TempPE
Properties.Resources.Designer.cs.dll
BaseCalculator.BaseCalc.resources
BaseCalculator.Properties.Resources.resources
BaseCalculator.csproj.GenerateResource.Cache
BaseCalculator.exe
Задание_6
05sem-soft
BaseCalculator
BaseCalculator
Properties
AssemblyInfo.cs
Resources.Designer.cs
Resources.resx
Settings.Designer.cs
Settings.settings
bin
Debug
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
Release
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
obj
Debug
Refactor
TempPE
Properties.Resources.Designer.cs.dll
BaseCalculator.BaseCalc.resources
BaseCalculator.Properties.Resources.resources
BaseCalculator.csproj.GenerateResource.Cache
BaseCalculator.exe
Задание_7
09sem-soft
BaseCalculatorNew
BaseCalculator
Properties
AssemblyInfo.cs
Resources.Designer.cs
Resources.resx
Settings.Designer.cs
Settings.settings
bin
Debug
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
Release
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
obj
Debug
Refactor
TempPE
Properties.Resources.Designer.cs.dll
BaseCalculator.BaseCalc.resources
BaseCalculator.Properties.Resources.resources
BaseCalculator.csproj.GenerateResource.Cache
BaseCalculator.exe
Задание_8
10sem-soft
BaseCalculatorNew
BaseCalculator
Properties
AssemblyInfo.cs
Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6487
Авторов
на СтудИзбе
303
Средний доход
с одного платного файла
Обучение Подробнее