Национальный исследовательский ядерный университет «МИФИ»
Опубликован: 28.11.2007 | Доступ: свободный | Студентов: 5146 / 802 | Оценка: 4.53 / 3.65 | Длительность: 22:18:00
ISBN: 978-5-94774-825-3
Специальности: Программист, Тестировщик
Практическая работа 10:

Интеграционное тестирование

< Лекция 13 || Практическая работа 10: 12 || Лекция 14 >

23.2.3. На примере "Калькулятора"

Как уже отмечалось, в MVSTE под unit-testing подразумевается именно интеграционное тестирование, а конкретно — тестирование с постоянной интеграцией. В "Автоматизация модульного тестирования" мы уже протестировали метод RunEstimate(), при интеграции классов AnalaizerClass и CalcClass. Аналогично, составив требования к этой подсистеме из двух классов (а это будут требования ко всем методам AnalaizerClass ), можно провести следующий этап тестирования. В качестве примера протестируем все методы такой подсистемы, сделав по одному тестовому примеру на каждый метод:

/// <summary>
        /// A test for RunEstimate ()
        /// Проверяем, что, если в стеке находится корректное выражение, представленное обратной польской записью, то
        /// метод RunEstimate правильно посчитает это выражение
        ///</summary>
        [DeploymentItem("BaseCalculator.exe")]
        [TestMethod()]
        public void RunEstimateTest()
        {
            string expected = "3";
            string actual;
            TestProjectCalculator.BaseCalculator_AnalaizerClassAccessor.opz = 
                   new ArrayList();
            ArrayList _opz = 
                   TestProjectCalculator.BaseCalculator_AnalaizerClassAccessor.opz;
            _opz.Add("7");
            _opz.Add("8");
            _opz.Add("+");
            _opz.Add("5");
            _opz.Add("/");

            actual = TestProjectCalculator.BaseCalculator_AnalaizerClassAccessor.RunEstimate();

            Assert.AreEqual(expected, actual, 
                            "BaseCalculator.AnalaizerClass.RunEstimate did not return the expected value.");
        }

        /// <summary>
        ///A test for CheckCurrency ()
        /// Проверяет, что, если в выражении нарушена скобочная структура, то метод возвращает false
        ///</summary>
        [DeploymentItem("BaseCalculator.exe")]
        [TestMethod()]
        public void CheckCurrencyTest()
        {
            bool expected = false;
            bool actual;
            
            TestProjectCalculator.BaseCalculator_AnalaizerClassAccessor.expression = 
                "((5+3)*2-(3*10))-2)+((5+3)";
            actual = TestProjectCalculator.BaseCalculator_AnalaizerClassAccessor.CheckCurrency();

            Assert.AreEqual(expected, actual, 
                            "BaseCalculator.AnalaizerClass.CheckCurrency did not return the expected value.");
            Assert.AreEqual(18, 
                           TestProjectCalculator.BaseCalculator_AnalaizerClassAccessor.erposition, 
                           "BaseCalculator.AnalaizerClass.CheckCurrency did not return the expected value.");
        }

        /// <summary>
        ///A test for CreateStack ()
        /// Проверяет, что если отформатированное выражение равно 
        ///"( ( 5 + 3) * 2 - ( 3 * 10 ) ) - 2 + ( 5 + 3 ) ", 
        /// то стек содержит следующие элементы "5 3 + 2 * 3 10 * - 2 - 5 3 + + "
        ///</summary>
        [DeploymentItem("BaseCalculator.exe")]
        [TestMethod()]
        public void CreateStackTest()
        {
            string expected = "5 3 + 2 * 3 10 * - 2 - 5 3 + + ";
            ArrayList actual;

            TestProjectCalculator.BaseCalculator_AnalaizerClassAccessor.expression = 
                                   "( ( 5 + 3 ) * 2 - ( 3 * 10 ) ) - 2 + ( 5 + 3 ) ";


actual = TestProjectCalculator.BaseCalculator_AnalaizerClassAccessor.Create
Stack();

            string actualstr = "";
            foreach (object obj in actual)
            {
                actualstr += obj.ToString() + " ";
            }
            Assert.AreEqual(expected, actualstr,  
                            "BaseCalculator.AnalaizerClass.CreateStack did not return the expected value.");
        }

        /// <summary>
        ///A test for Estimate ()
        ///Проверяет, что , если выражение , которое необходимо проверить,равно 
        ///((5+3)*2-(3*10))-2+(5+3), то метод вернет его значение,
        /// равное -8
        ///</summary>
        [DeploymentItem("BaseCalculator.exe")]
        [TestMethod()]
        public void EstimateTest()
        {
            string expected = "-8";
            string actual;

           TestProjectCalculator.BaseCalculator_AnalaizerClassAccessor.expression = 
                  "((5+3)*2-(3*10))-2+(5+3)";
            actual = TestProjectCalculator.BaseCalculator_AnalaizerClassAccessor.Estimate();

            Assert.AreEqual(expected, actual, 
                     "BaseCalculator.AnalaizerClass.Estimate did not return the expected value.");
            
        }

        /// <summary>
        ///A test for Format ()
        /// Проверяет, что если выражение равно "
        /// ((5+3)*2-(3  *10))-2+ (5+3)", то метод отформатирует его к виду:
        /// "( ( 5 + 3 ) * 2 - ( 3 * 10 ) ) - 2 + ( 5 + 3 ) "
        ///</summary>
        [DeploymentItem("BaseCalculator.exe")]
        [TestMethod()]
        public void FormatTest()
        {
            string expected = "( ( 5 + 3 ) * 2 - ( 3 * 10 ) ) - 2 + ( 5 + 3 ) ";
            string actual;
            TestProjectCalculator.BaseCalculator_AnalaizerClassAccessor.expression = 
                   "((5+3)*2-(3  *10))-2+ (5+3)";
            actual = TestProjectCalculator.BaseCalculator_AnalaizerClassAccessor.Format();
    
            Assert.AreEqual(expected, actual, 
                     "BaseCalculator.AnalaizerClass.Format did not return the expected value.");
           
        }
23.1.

Запустив тесты, можно убедиться в корректной (для данных тестовых примеров) работе методов.

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

Как уже отмечалось в "Модульное тестирование" , эти методы обладают многими недостатками, и некоторые из них генерируют исключения на некорректных входных данных. Это, в принципе, логично, так как запуск метода RunEstimate() подразумевает, что входное выражение уже обработано в методах CheckCurrency(), Format(), CreateStack(), а отдельно от них этот метод вызываться не будет. Для этого необходимо сделать уровень доступа к ним private и протестировать их только на корректных данных. Основное же внимание стоит уделить методу Estimate(), который поочередно запускает все вышеперечисленные методы и имеет уровень доступа public. Один из тестов для него приведен выше.

После того, как такая система из двух модулей протестирована, переходим к тестированию всей системы, присоединив последние модули.

Замечание. Модуль BaseCalc, который отвечает за пользовательский интерфейс, мы не тестируем, так как это выходит за рамки курса.

Теперь можно использовать системные требования, для тестирования программы в целом. Проведем тесты для метода Main(string[] args), так как это единственный метод, не считая уже протестированного Estimate(), который не относится к графическому интерфейсу и с которым работают пользователи:

/// <summary>
        ///A test for Main (string[])
        /// 4.2.1.1. Для чисел, каждое из которых меньше либо равно MAXINT и больше либо равно  MININT, 
        /// функция суммирования должна возвращать правильную сумму с точки зрения математики
        ///</summary>
        [DeploymentItem("BaseCalculator.exe")]
        [TestMethod()]
        public void MainTest()
        {
            string[] args = new string[1]; // TODO: Initialize to an appropriate value
            args[0] = "2+2";

            int expected = 0;
            int actual;

            actual = TestProjectCalculator.BaseCalculator_ProgramAccessor.Main(args);
            Assert.AreEqual(expected, actual, 
                   "BaseCalculator.Program.Main did not return the expected value.");
        }

        /// <summary>
        ///A test for Main (string[])
        /// 4.2.1.2. Для чисел, сумма которых больше чем MAXINT и меньше чем MININT, 
        /// а также в случае, если любое из слагаемых больше чем MAXINT или меньше чем MININT, 
        /// программа должна выдавать ошибку Error 06(см 2.2.3) 
        ///</summary>
        [DeploymentItem("BaseCalculator.exe")]
        [TestMethod()]
        public void MainTest1()
        {
            string[] args = new string[1]; // TODO: Initialize to an appropriate value
            args[0] = "2711477380+1000000";

            int expected = 6;
            int actual;

            actual = TestProjectCalculator.BaseCalculator_ProgramAccessor.Main(args);

            Assert.AreEqual(expected, actual, 
                   "BaseCalculator.Program.Main did not return the expected value.");
        }
23.2.

И так далее. Таким образом, проверив методы Main() и Estimate(), а также некоторые методы визуального интерфейса, можно убедиться в соответствии системы требованиям или, наоборот, обнаружить какие-то ошибки в межмодульном взаимодействии.

23.3. Раздаточный материал

23.3.1. Программа

Будут выданы исходные тексты программы BaseCalculatorNew для тестирования методом "белого ящика" средствами MVSTE и пример тестового драйвера.

23.4. Домашнее задание

Составить тест-план и провести интеграционное тестирование (средствами MVSTE) методов Main() и Estimate().

< Лекция 13 || Практическая работа 10: 12 || Лекция 14 >
Илья Макаренко
Илья Макаренко

Добрый день.

Вопрос №1

Какова стоимость получения диплома о мини-МБА по данному курсу? Или ориентироваться на указанную на сайте?

Вопрос №2

Возможно ли начать обучение без потери результатов, не отправив документы на зачисление, а отправку выполнить позже?

Александр Медов
Александр Медов

Здравствуйте, какова полная сумма предоставленной услуги с печатью документа и отправкой по почте?