C #. Приклад створення Unit-тесту в MS Visual Studio

  1. зміст
  2. виконання
  3. 2. Підготовка тексту модуля Program.cs
  4. 2.2. Зробити клас Program загальнодоступним (public)
  5. 3. Лістинг програми, що тестується
  6. 4. Створення тесту
  7. 4.1. Додавання нового проекту до вирішення
  8. 4.2. структура рішення
  9. 4.3. Текст файлу «UnitTest1.cs». Атрибути [TestMethod] і [TestClass]
  10. 4.4. Виконання змін в тексті модуля UnitTest1. Зміна назви тестирующего методу
  11. 4.5. Підключення проекту MinApp до проекту TestMinApp
  12. 4.6. Внесення змін до тексту модуля UnitTest1.cs
  13. 4.6.2. Текст методу TestMin ()
  14. 4.7. Текст модуля UnitTest1.cs
  15. 5. Запуск тесту на виконання і перевірка результату тестування
  16. 6. Підсумок. Взаємодія між проектами

У даній темі описується покроковий процес створення найпростішого Unit-тесту в системі Microsoft Visual Studio 2010 року (C #) для додатки типу Console Application. Використовуючи даний приклад, можна навчитися створювати власні Unit-тести. Приклад також демонструє використання класу Assert для проведення тестування роботи функцій.

зміст

Умова задачі

Для додатки типу Console Application розробити Unit-тест, який тестує роботу функції Min (), яка визначає максимальний елемент з трьох чисел.

Для функції Min () встановити метод тестування TestMin (). Перевірити роботу функції.

виконання

1. Створити додаток за шаблоном Console Applicaiton

Запустити на виконання MS Visual Studio 2010. Для створення проекту за шаблоном Console Application потрібно викликати наступну послідовність команд:

File -> New -> Project ...

В результаті відкриється вікно New Project. У вікні потрібно вибрати шаблон Console Application як зображено на малюнку 1. Шаблон вибирається у вкладці Visual C #.

Visual C # -> Console Application

Visual C # -> Console Application

Мал. 1. Вікно «New Project». Як вибрати програму типу Console Application

2. Підготовка тексту модуля Program.cs

2.1. Додати функцію Min () в текст модуля

У тіло класу Program потрібно додати текст функції Min ().

Функція оголошується як загальнодоступна (public) і статична (static). Текст функції Min ()

public static int Min (int a, int b, int c) {int min = a; if (min> b) min = b; if (min> c) min = c; return min; }

public static int Min (int a, int b, int c) {int min = a;  if (min> b) min = b;  if (min> c) min = c;  return min;  }

Мал. 2. Форма вікна MS Visual Studio 2010 модуль «Program.cs»

2.2. Зробити клас Program загальнодоступним (public)

Для того, щоб мати доступ до функції Min () класу Program потрібно зробити цей клас загальнодоступним. Для цього, перед оголошенням класу потрібно визначити ключове слово public.

... namespace MinApp {public class Program {// методи класу // ...}} ...

Після цього тестована програма готова.

3. Лістинг програми, що тестується

На даний момент лістинг програми, що тестується наступний:

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MinApp {public class Program {public static int Min (int a, int b, int c) {int min = a; if (min> b) min = b; if (min> c) min = c; return min; } Static void Main (string [] args) {Console.WriteLine ( "Demo of Unit-testing in C #."); }}}

Оскільки, ця програма буде тестуватися з іншого модуля тестування, то в функції Main () більше нічого вводити не потрібно. Тому що, відповідно до умови задачі, потрібно протестувати роботу функції Min (). А це вже буде здійснюватися з модуля тестування. На даний момент наша програма готова до тестування.

4. Створення тесту

Тест створюється окремим проектом (Project) в рішенні (Solution). Тестована програма не знає про це. Програма, яка буде тестувати (тестирующая програма) викличе функції програми, що тестується. У нашому випадку програма-тест буде викликати функцію

int Min (int, int, int);

4.1. Додавання нового проекту до вирішення

Для даного рішення (Solution) потрібно додати новий проект за допомогою команди

File-> Add-> New Project ...

Вікно створення нового проекту зображено на малюнку 3.

Мал. 3. Вікно створення проекту типу Test Project

У вікні необхідно вибрати групу шаблонів Visual C # -> Test. З відображених шаблонів вибирається шаблон проекту «Test Project». В поле «Name» вказується ім'я проекту, який буде тестувати нашу програму. Потрібно поставити, наприклад, TestMinApp. Проект розміщується в окремій папці «E: \ Test \ MinApp».

Проект розміщується в окремій папці «E: \ Test \ MinApp»

Мал. 4. Текст модуля UnitTest1.cs. Вікно утиліти Solution Explorer з відображеними проектами TestMinApp і MinApp

4.2. структура рішення

Як видно з малюнка 4, утиліта Solution Explorer відображає структуру рішення (Solution Items), яке містить два проекти:

  • проект MinApp. Це проект, створений за шаблоном Console Application з функцією Min (), яку потрібно протестувати;
  • проект TestMinApp. Цей проект призначений для тестування функцій проекту MinApp. Програмний код, який тестує функцію Min (), буде вноситися в файл проекту UnitTest1 проекту TestMinApp.

Обидва проекти можуть виконуватися незалежно один від одного.

4.3. Текст файлу «UnitTest1.cs». Атрибути [TestMethod] і [TestClass]

У проекті TestMinApp головний інтерес представляє файл тесту UnitTest1.cs. У цьому файлі розміщуються методи, які будуть тестувати функції проекту MinApp. Проект TestMinApp може містити будь-яку кількість файлів, які містять тести (наприклад, UnitTest2.cs, UnitTest3.cs і т.д.).

Лістинг файлу UnitTest1.cs, сформований MS Visual Studio 2010 наступний:

using System; using System.Text; using System.Collections.Generic; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace TestMinApp {/// <summary> /// Summary description for UnitTest1 /// </ summary> [TestClass] public class UnitTest1 {public UnitTest1 () {// // TODO: Add constructor logic here //} private TestContext testContextInstance; /// <summary> /// Gets or sets the test context which provides /// information about and functionality for the current test run. /// </ summary> public TestContext TestContext {get {return testContextInstance; } Set {testContextInstance = value; }} #Region Additional test attributes // // You can use the following additional attributes as you write your tests: // // Use ClassInitialize to run code before running the first test in the class // [ClassInitialize ()] // public static void MyClassInitialize (TestContext testContext) {} // // Use ClassCleanup to run code after all tests in a class have run // [ClassCleanup ()] // public static void MyClassCleanup () {} // // Use TestInitialize to run code before running each test // [TestInitialize ()] // public void MyTestInitialize () {} // // Use TestCleanup to run code after each test has run // [TestCleanup ()] // public void MyTestCleanup ( ) {} // #endregion [TestMethod] public void TestMethod1 () {// // TODO: Add test logic here //}}}

Як видно з вищенаведеного коду, файл містить клас з ім'ям UnitTest1. У класі є загальнодоступний (public) метод з ім'ям TestMethod1 (). Перед реалізацією методу TestMethod1 () розміщується атрибут [TestMethod]. Це означає, що в тіло методу потрібно вписати код, який буде тестувати функції проекту MinApp.

У класі можна вписувати будь-яку кількість методів, які будуть тестувати різні функції з різних модулів. Головне, щоб ці методи були помічені атрибутом [TestMethod].

4.4. Виконання змін в тексті модуля UnitTest1. Зміна назви тестирующего методу

Допускається змінювати назви методів і додавати нові методи, які позначені атрибутом [TestMethod] в модулі UnitTest1.cs. З огляду на це, в тексті модуля UnitTest1.cs потрібно метод TestMethod1 () перейменувати на TestMin ().

Після виконаних змін, скорочений текст модуля файлу UnitTest1.cs матиме вигляд:

using System; using System.Text; using System.Collections.Generic; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace TestMinApp {/// <summary> /// Summary description for UnitTest1 /// </ summary> [TestClass] public class UnitTest1 {... [TestMethod] public void TestMin () {// // TODO: Add test logic here //}}}

4.5. Підключення проекту MinApp до проекту TestMinApp

Щоб мати доступ до функції Min () (проект MinApp) з проекту TestMinApp, потрібно підключити простір імен в якому розміщується ця функція.

Для цього перш за все потрібно викликати контекстне меню для проекту TestMinApp. Потім в контекстному меню потрібно викликати команду «Add Reference ...» (малюнок 5).

» (малюнок 5)

Мал. 5. Команда «Add Referencse ...»

В результаті відкриється вікно «Add Reference», в якому потрібно вибрати проект MinApp.

Мал. 6. Вікно «Add Reference». Підключення проекту MinApp

Після виконаних дій функції проекту MinApp будуть доступні для використання в проекті TestMinApp.

Після виконаних дій функції проекту MinApp будуть доступні для використання в проекті TestMinApp

Мал. 7. Вкладка References з підключеним проектом MinApp

4.6. Внесення змін до тексту модуля UnitTest1.cs
4.6.1. Додавання простору імен MinApp в модуль UnitTest1.cs

На цьому етап в модуль UnitTest1.cs потрібно додати простір імен MinApp за допомогою директиви using:

using System; using System.Text; using System.Collections.Generic; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using MinApp; namespace TestMinApp {...}

4.6.2. Текст методу TestMin ()

У тексті методу TestMin () потрібно ввести наступний код:

... [TestMethod] public void TestMin () {// // TODO: Add test logic here // int min; min = Program .Min (3, 4, 5); Assert .AreEqual (2, min); } ...

4.7. Текст модуля UnitTest1.cs

Текст всього модуля UnitTest1.cs має наступний вигляд:

using System; using System.Text; using System.Collections.Generic; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using MinApp; namespace TestMinApp {/// <summary> /// Summary description for UnitTest1 /// </ summary> [TestClass] public class UnitTest1 {public UnitTest1 () {// // TODO: Add constructor logic here //} private TestContext testContextInstance; /// <summary> /// Gets or sets the test context which provides /// information about and functionality for the current test run. /// </ summary> public TestContext TestContext {get {return testContextInstance; } Set {testContextInstance = value; }} #Region Additional test attributes // // You can use the following additional attributes as you write your tests: // // Use ClassInitialize to run code before running the first test in the class // [ClassInitialize ()] // public static void MyClassInitialize (testContext testContext) {} // // Use ClassCleanup to run code after all tests in a class have run // [ClassCleanup ()] // public static void MyClassCleanup () {} // // Use TestInitialize to run code before running each test // [TestInitialize ()] // public void MyTestInitialize () {} // // Use TestCleanup to run code after each test has run // [TestCleanup ()] // public void MyTestCleanup ( ) {} // #endregion [TestMethod] public void TestMin () {// // TODO: Add test logic here // int min; min = Program .Min (3, 4, 5); Assert .AreEqual (2, min); }}}

5. Запуск тесту на виконання і перевірка результату тестування

У Microsoft Visual Studio 2010 року для роботи з Unit -Тест реалізовано спеціальне меню команд, яке називається Test.

Щоб запустити тест на виконання, потрібно вибрати одну з команд

Test -> Run -> Tests in Current Context

або

Test -> Run -> All Tests in Solution

як показано на малюнку 8.

Мал. 8. Виклик команди запуску тестування і перегляд результату

Після запуску тесту, результат можна переглянути в нижній частині у вікні Test Results. Як видно з малюнка, тест не зданий. Це логічно, тому що у функції Assert.AreEqual () ми порівнюємо числа 2 і 3, які різні між собою. Тут спеціально введено число 2 замість числа 3.

Якщо замість числа 2 ввести правильну відповідь - число 3 (мінімум між 3, 4, 5), то тест буде зданий (малюнок 9). В цьому випадку текст методу TestMin () буде наступний:

... [TestMethod] public void TestMin () {// // TODO: Add test logic here // int min; min = Program .Min (3, 4, 5); Assert .AreEqual (3, min); } ...

Вікно результату зображено на малюнку 9.

Мал. 9. Результат тестування для випадку, якщо ввести правильну відповідь

Тепер можна зробити висновок про те, що функція Min () для даного випадку працює правильно.

6. Підсумок. Взаємодія між проектами

У даній роботі в рішенні (Solution) сформовані два проекти. Один проект MinApp містить функцію Min (), яку потрібно протестувати. Другий проект TestMinApp містить тестуючі методи.

У Microsoft Visual Studio 2010 кожен з проектів запускається за допомогою різних команд меню. Так, проект MinApp запускається стандартним способом з меню Run. А проект TestMinApp запускається зі спеціального меню Test.

пов'язані теми