17. Модульное тестирование

Назад: 16 Ручное тестирование Содержание Дальше: 18 Полезные объекты TestComplete

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

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

TestComplete поддерживает следующие типы модульных тестов: MSTest, JUnit, NUnit, DUnit и TCUnitTest. Первые четыре запускаются при помощи отдельных утилит, а последний тип тестов требует внесения изменений в тестируемое приложение.

В справочной системе TestComplete подробно рассмотрены все шаги по подключению и запуску unit test-ов, мы же рассмотрим только два примера запуска модульных тестов для .NET приложения: NUnit и TCUnitTest.

Тестовое приложение

Специально для этой главы мы создали небольшое .NET-приложение (его можно найти в архиве с примерами, папка nUnitTestingApp).

В поля Var1 и Var2 вводятся числовые значения, а затем нажимается кнопка Plus или Minus. В зависимости от нажатой кнопки в третье поле помещается результат сложения либо вычитания этих переменных соответственно. Вот как выглядит код сложения и вычитания, а также код нажатий на кнопки:

 

public static int PlusMethod(int var1, int var2)

        {

            return var1 + var2;

        }

 

        public static int MinusMethod(int var1, int var2)

        {

            return var1 – var2;

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            txtResult.Text = (PlusMethod(Convert.ToInt32(this.txtVar1.Text),

                Convert.ToInt32(this.txtVar2.Text))).ToString();

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            txtResult.Text = (MinusMethod(Convert.ToInt32(this.txtVar1.Text),

                Convert.ToInt32(this.txtVar2.Text))).ToString();

        }

Ниже мы поместили класс MyTests, который выполняет 3 проверки для метода PlusMethod:

// unit tests

    [TestFixture]

    public class MyTests

    {

        [Test]

        public void PlusTest1()

        {

            Assert.AreEqual(Form1.PlusMethod(2, 3), 5);

        }

        [Test]

        public void PlusTest2()

        {

            Assert.AreEqual(Form1.PlusMethod(5, 6), 11);

        }

        [Test]

        public void PlusTest3()

        {

            Assert.AreEqual(Form1.PlusMethod(10, 3), 5);

        }


    }


Обратите внимание, что последний тест изначально задан неверно (10 + 3 = 13, а не 5, как ожидается в тесте). Это сделано специально, чтобы сымитировать ошибку в юнит-тесте.

Запуск NUnit тестов с помощью внешней утилиты

Для запуска юнит-тестов используется утилита командной сроки nunit-console.exe.

Прежде всего, необходимо указать путь к этой утилите в настройках TestComplete (Tools – Options – Engines – Unit Testing). Естественно, что для этого NUnit должен быть установлен на вашем компьютере.

Теперь добавим в проект элемент UnitTesting (правой кнопкой на имени проекта, Add – New Item – Unit Testing).

Затем правой кнопкой на добавленном элементе UnitTesting1, Add – New Item, и выберем элемент NUnit.

Теперь дважды щелкнем по добавленному элементу NUnit1 и заполним необходимые поля. В нашем случае это первые два поля:

  • Assembly file name – имя exe либо dll файла с юнит тестами (в нашем случае это exe-файл приложения)
  • Text fixtures – тестовые классы (это необязательное поле, по умолчанию будут использованы все классы с атрибутом TestFixture)

Теперь мы можем запускать модульные тесты прямо из скриптов TestComplete. Например:

function TestNUnit()

{

  var ut = UnitTesting1.NUnit1;

}

В результате мы получим следующий лог:

Здесь можно прочитать, в каком именно тесте произошла ошибка, какое было ожидаемое и реальное значение и т.п. Эта информация предоставляется приложением NUnit.

Создание юнит тестов TCUnitTest

Кроме использования внешней утилиты, можно дать возможность TestComplete-у получать доступ к юнит тестам непосредственно через приложение.

Для этого необходимо в приложении добавить ссылку (Reference) на сборку

<TestComplete>\Bin\Extensions\AutomatedQA.TestComplete.UnitTesting.dll

установить свойство этой сборки Copy Local = True, а затем предоставить возможность TestComplete-у получать доступ к тестовым методам. Для этого необходимо воспользоваться методом AddClasses объекта UnitTesting:

Type[] typearr = { typeof(MyTests) };

UnitTesting.AddClasses(typearr);

 

Теперь добавим новый юнит тест (правый щелчок на элементе UnitTesting1, Add – New Item – TCUnitTest).

Запустите тестовое приложение и откройте в TestComplete добавленный тест. В первом поле необходимо выбрать процесс приложения (в нашем случае это nUnitTestingApp), а также одну из опций запуска.

Опции:

  • Automatically load list of tests and run all tests – запускает все доступные TestComplete-у тесты
  • Run only selected tests – запускает только выделенные в редакторе тесты
  • Automatically load list of tests and run without selected tests – запускает все тесты, кроме выделенных в редакторе

Результат запуска этого теста (запуск осуществляется таким же способом, как и в предыдущем случае, с помощью метода Execute):

Как видите, у этого способа есть преимущество перед использованием утилиты командной строки: результаты показаны в привычном для пользователя TestComplete виде. Однако есть и недостаток: в случае использования этого метода необходимо сначала запустить тестовое приложение.

Подробнее о других видах юнит тестов (JUnit, DUnit и т.д.) можно прочитать в справке по TestComplete, раздел Unit Testing Project Item.

Назад: 16 Ручное тестирование Содержание Дальше: 18 Полезные объекты TestComplete