Учебно-методические материалы для студентов кафедры АСОИУ

ЛР №9 Подробное описание тестового случая

Рассматривается пример тестов на C# для класса TCommand (приложение 3 (HLD)). При выполнении заданий необходимо будет самостоятельно написать тесты для других классов приложения. Параллельно с изучением этого раздела полезно открыть проект ModuleTesting\ModuleTests.sln.

Рассмотрим тестирование класса TCommand. Этот класс реализует единственную операцию GetFullName(), которая возвращает полное название команды в виде строки. Разработаем спецификацию тестового случая для тестирования метода GetFullName на основе спецификации этого класса (приложение 3):

Название класса: TСommand

Название тестового случая: TСommandTest1

Описание тестового случая: Тест проверяет правильность работы метода GetFullName — получения полного названия команды на основе кода команды. В тесте подаются следующие значения кодов команд (входные значения): -1, 1, 2, 4, 6, 20, где -1 — запрещенное значение

Начальные условия: Нет

Ожидаемый результат:

Перечисленным входным значениям должны соответствовать следующие выходные:

Коду команды -1 должно соответствовать сообщение "ОШИБКА: Неверный код команды"

Коду команды 1 должно соответствовать полное название команды "ПОЛУЧИТЬ ИЗ ВХОДНОЙ ЯЧЕЙКИ"

Коду команды 2 должно соответствовать полное название команды "ОТПРАВИТЬ ИЗ ЯЧЕЙКИ В ВЫХОДНУЮ ЯЧЕЙКУ"

Коду команды 4 должно соответствовать полное название команды "ПОЛОЖИТЬ В РЕЗЕРВ"

Коду команды 6 должно соответствовать полное название команды "ПРОИЗВЕСТИ ЗАНУЛЕНИЕ"

Коду команды 20 должно соответствовать полное название команды "ЗАВЕРШЕНИЕ КОМАНД ВЫДАЧИ"

На основе спецификации был создан тестовый драйвер — класс TCommandTester, наследующий функциональность абстрактного класса Tester.

public class Log
{
static private StreamWriter log=new
StreamWriter("log.log"); //Создание лог файла
static public void Add(string msg)
//Добавление сообщения в лог файл
{
log.WriteLine(msg);
}
static public void Close() //Закрыть лог файл
{
log.Close();
}
}
abstract class Tester
{
protected void LogMessage(string s)
//Добавление сообщения в лог-файл
{
Log.Add(s);
}
}
class TCommandTester:Tester // Тестовый драйвер
{
TCommand OUT;
public TCommandTester()
{
OUT=new TCommand();
Run();
}
private void Run()
{
TCommandTest1();
}
private void TCommandTest1()
{
int[] commands = {-1, 1, 2, 4, 6, 20};
for(int i=0;i<=5;i++)
{
OUT.NameCommand=commands[i];
LogMessage(commands[i].ToString()+" :
"+OUT.GetFullName());
}
}
[STAThread]
static void Main()
{
TCommandTester CommandTester = new TCommandTester();
Log.Close();
}
}

Листинг 2.1. Тестовый драйвер

Класс TCommandTester содержит метод TCommandTest1(), в котором реализована вся функциональность теста. В данном случае для покрытия спецификации достаточно перебрать следующие значения кодов команд: -1, 1, 2, 4, 6, 20, где -1 — запрещенное значение, и получить соответствующие им полное название команды с помощью метода GetFullName(). Пары соответствующих значений заносятся в log-файл для последующей проверки на соответствие спецификации.

Таким образом, для тестирования любого метода класса необходимо:

Определить, какая часть функциональности метода должна быть протестирована, то есть при каких условиях он должен вызываться. Под условиями здесь понимаются параметры вызова методов, значения полей и свойств объектов, наличие и содержимое используемых файлов и т. д.

Создать тестовое окружение, обеспечивающее требуемые условия.

Запустить тестовое окружение на выполнение.

Обеспечить сохранение результатов в файл для их последующей проверки.

После завершения выполнения сравнить полученные результаты со спецификацией.

CC-BY-CA Цыганенко В.Н., 15.10.2012