N.B. Шаблон проекта находится в группе шаблонов «Тест».
В созданный проект необходимо добавить ссылку на проект Calc (вкладка Проекты).
Пустой проект unit-тестов:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Calc;
namespace CalcTests
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
}
}
}
В проекте Calc содержатся 2 метода, которые надо протестировать на корректность работы. Для этого надо создать 3 теста, которые будут проверять операцию деления двух чисел, операцию деления на нуль и операцию сложения двух чисел и инкрементацию полученной суммы. Итоговый класс UnitTest1:
[TestClass]
public class UnitTest1
{
// Тест проверки метода AddWithInc
[TestMethod]
public void AddWithInc_2Plus3Inc1_Returned6()
{
// arrange
var calc = new Calculator();
double arg1 = 2;
double arg2 = 3;
double expected = 6;
// act
double result = calc.AddWithInc(arg1, arg2);
// assert
Assert.AreEqual(expected, result);
}
// Тест проверки метода Div
[TestMethod]
public void Div_4Div2_Returned2()
{
// arrange
var calc = new Calculator();
double arg1 = 4;
double arg2 = 2;
double expected = 2;
// act
double result = calc.Div(arg1, arg2);
// assert
Assert.AreEqual(expected, result);
}
[TestMethod]
[ExpectedException(typeof(DivideByZeroException),
"Недопустимая операция деления на ноль!")]
public void Div_4Div0_ZeroDivException()
{
// arrange
var calc = new Calculator();
double arg1 = 4;
double arg2 = 0;
// act
double result = calc.Div(arg1, arg2);
// assert
}
}
В тесте AddWithInc_2Plus3Inc1_Returned6 создаются 3 переменные – аргументы, передаваемые в метод AddWithInc, и ожидаемый результат, возвращаемый этим методом. Результат выполнения метода будет записан в переменную result.
На следующем шаге происходит сравнение ожидаемого результата с реальным числом метода AddWithInc. При совпадении результата с ожидаемым числом, то есть числом 6, тест будет считаться положительным и пройденным. Если полученный результат будет отличаться от числа 6, то тест считается проваленным.
В тесте Div_4Div2_Returned2 также создаются два аргумента и ожидаемый результат выполнения метода Div. Если результат деления 4/2 в методе равен 2, то тест считается пройдённым. В противном случае — не пройденным.
Тест Div_4Div0_ZeroDivException будет считаться пройденным в случае возникновения исключения DivideByZeroException – деление на ноль. В отличие от двух предыдущих тестов, в этом тесте нет оператора Assert. Здесь обработка ожидаемого результата производится с помощью атрибута ExpectedException.
Если аргумент 2 равен нулю, то в методе Div возникнет исключение DivideByZeroException. В таком случае тест считается пройденным. В случае, когда аргумент 2 будет отличен от нуля, тест считается проваленным.
Для запуска теста необходимо открыть окно Test Explorer (Test -> Windows -> Test Explorer) (Ctrl+, T). В появившемся окне можно увидеть 3 добавленных теста:
Если в результате запуска всех тестов они выполнятся успешно, в окне Test Explorer отобразятся зеленые пиктограммы, обозначающие успешность выполнения. В противном случае пиктограммы будут красными.
Задание
1. Изучить механизм применения абстрактных классов в языке C#.
2. Создать абстрактный класс Array, содержащий такие члены:
- N – число элементов в массиве;
- Arr – указатель на массив;
- Init() – метод инициализации элементов массива случайными числами в заданном диапазоне;
- Calc() – абстрактный метод подсчета числового показателя на основе данных массива;
- PrintArray() – абстрактный метод вывода массива на экран;
- Processing() – абстрактный метод, выполняющий обработку массива.
Данные для реализации методов Init() выбрать из таблицы индивидуальных заданий к выполнению лабораторной работы №4 (см. табл. 6) согласно номеру своего варианта.
3. Создать производный класс Vector, реализующий заданную обработку и вывод на экран одномерного массива.
3.1. Вывод элементов массива должен осуществляться в одну строку через символ табуляции.
3.2. Задание на расчет показателя и обработку массива выбрать из таблицы индивидуальных заданий к выполнению лабораторной работы №4 (см. табл. 6) согласно номеру варианта.
4. Создать производный класс Matrix, реализующий заданную обработку и вывод на экран двумерного массива.
4.1. Вывод элементов матрицы должен осуществляться в прямоугольной форме, элементы строк должны печататься через символ табуляции.
4.2. Задание на расчет показателя и обработку массива выбрать из таблицы индивидуальных заданий к выполнению лабораторной работы №9 (см. табл. 12) согласно номеру своего варианта.
5. При реализации методов Calc() и Processing() реализовать обработку необходимых исключений.
6. Разработать метод Main() для организации работы с одномерными и двумерными массивами. Число элементов N и границы диапазона генерации значений элементов массивов водить с клавиатуры. Реализовать обработку необходимых исключений.
7. Разработать класс Test для модульного тестирования реализаций методов Calc, в том числе возникновения исключений. Для создания тестовых массивов в классах Vector и Matrix реализовать конструктор, инициализирующий массив заданной размерности константными значениями.
Содержание отчета
1. Титульный лист.
2. Цель работы, индивидуальное задание (табл. 6, 12).
3. Листинг программы.
4. Результаты тестирования всех методов, в том числе в условиях возникновения исключительных ситуаций.
5. Описание различий в работе разных реализаций абстрактных методов.
6. Результаты модульного тестирования в Test Explorer.
7. Выводы.
Контрольные вопросы
1. В чем заключается принцип наследования?
2. Как реализовать наследование классов на языке C#?
3. Какие модификаторы прав доступа используются при наследовании и для чего?
4. Что такое родительский класс?
5. Что такое абстрактный класс?
6. Сколько потомков может быть у родительского класса?
7. Сколько родительских классов может наследовать класс-потомок?
8. Что такое включение, какого вида бывают включения?
9. В чем состоит идея принудительного наследования?
10. Раскрыть механизм наследования классов на конкретном примере.
11. Что такое модульное тестирование?
12. На каком этапе жизненного цикла ПО выполняется модульное тестирование?
13. Какие классы C# используются для реализации модульного тестирования?
14. Какими инструментами можно протестировать соответствие фактического и ожидаемого значений?
Дата добавления: 2021-12-14; просмотров: 512;