ЛР №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