Лабораторная работа №1
(по дисциплине "Тестирование ПО")
Тема: «Модульный тест для консольных приложений»
Модульный тест — это программный тест, написанный на языках Visual C#, Visual Basic или написанный на Visual C++ и скомпилированный с параметром /clr:safe. Этот тест использует методы проекта.
Модульный тест вызывает метод класса, передавая параметры, и проверяет, соответствует ли возвращаемое значение ожидаемому. Модульные тесты пишутся вручную или создаются автоматически.
Последовательность выполнения лабораторной работы:
• Открыть Visual Studio 2008 (Team System Test Edition)
• В меню Файл выбрать пункт Создать, а затем команду Проект. Открылось диалоговое окно Создать проект.
• В списке Типы проектов выбрал Visual C#.
• В списке Шаблоны выбрать Консольное приложение.
• В поле Имя ввести ConsoleApplication и нажать кнопку ОК.
• Новый проект " ConsoleApplication " будет создан и появится в обозревателе решений.
• В обозревателе решений дважды щелкнуть файл Program.cs, чтобы открыть его в редакторе кода Visual Studio.
• Скопировать исходный код.
• Заменить исходное содержимое файла Program.cs кодом:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UnitTest
{
class Program
{
static void Main(string[] args)
{
double unitPrice = 5.99;
int quantity = 12;
double totalPrice;
totalPrice = CalculateTotalPrice(unitPrice, quantity);
}
static double CalculateTotalPrice(double uPrice, int Qty)
{
double totalPrice;
double tax = 0.12;
totalPrice = uPrice * Qty + (uPrice * tax * Qty); //
Console.WriteLine("Total Price of {0} Items is {1}", Qty.ToString(), totalPrice.ToString());
return totalPrice;
}
}
}
Пространство имен System содержит фундаментальные классы, которые определяют распространенные типы значений и ссылочные типы данных, события и обработчики событий, интерфейсы, атрибуты и исключения обработки.
Пространство имен System.Collections.Generic содержит интерфейсы и классы, определяющие универсальные коллекции, которые позволяют пользователям создавать строго типизированные коллекции, обеспечивающие повышенную производительность и безопасность типов по сравнению с неуниверсальными строго типизированными коллекциями.
Пространства имен System.Linq содержат типы, поддерживающие запросы с использованием LINQ. Сюда относятся типы, представляющие запросы в виде объектов в деревьях выражений. Language Integrated Query (LINQ) — проект Microsoft по добавлению синтаксиса языка запросов (напоминающего SQL) в языки программирования платформы.NET Framework. LINQ выпущен вместе с Visual Studio 2008 в конце ноября 2007 года.
Пространство имен System.Text содержат типы для работы с кодировками символов и для управления строками.
• В меню Построение выбрать команду Построить решение.
Будет создан проект с именем " ConsoleApplication ". Он содержит исходный код, подлежащий тестированию.
Создание модульного теста
• В обозревателе решений дважды щелкнуть файл Program.cs в проекте "ConsoleApplication". Это приведет к открытию файла исходного кода для просмотра и редактирования.
• В файле Program.cs, перейти к методу CalculateTotalPrice ().
• Щелкнуть метод правой кнопкой мыши и выбрать команду Создать модульный тест.
Открылось диалоговое окно Создать модульные тесты.
• В области Выходной проект щелкнуть Создать новый тестовый проект Visual C#.
• В диалоговом окне Создать модульные тесты нажал кнопку ОК.
Откроется диалоговое окно Новый тестовый проект.
• Оставить имя по умолчанию и нажать кнопку Создать.
При этом будет создан проект с именем "TestProject1", отображаемый в обозревателе решений.
При этом будет создан проект с именем "TestProject1", отображаемый в обозревателе решений.
В этот тестовый проект добавляется файл с именем ProgramTest.cs, содержащий тестовый класс. В класс включается метод инициализации, метод очистки и методы для тестирования методов CalculateTotalPriceTest(). Каждому методу тестирования автоматически присваивается атрибут TestMethod(). Каждый тест соответствует отдельному методу в тестируемом коде, подлежащему проверке. Методы теста включены в тестовый класс, которому присвоен атрибут TestClass().
• В файле ProgramTest.cs указать значения переменных, подлежащих тестированию
• using UnitTest;
• using Microsoft.VisualStudio.TestTools.UnitTesting;
• namespace TestProject1
• {
•
•
• /// <summary>
• ///Это класс теста для ProgramTest, в котором должны
• ///находиться все модульные тесты ProgramTest
• ///</summary>
• [TestClass()]
• public class ProgramTest
• {
•
•
• private TestContext testContextInstance;
•
• /// <summary>
• ///Получает или устанавливает контекст теста, в котором предоставляются
• ///сведения о текущем тестовом запуске и обеспечивается его функциональность.
• ///</summary>
• public TestContext TestContext
• {
• get
• {
• return testContextInstance;
• }
• set
• {
• testContextInstance = value;
• }
• }
•
• #region Дополнительные атрибуты теста
• //
• //При написании тестов можно использовать следующие дополнительные атрибуты:
• //
• //ClassInitialize используется для выполнения кода до запуска первого теста в классе
• //[ClassInitialize()]
• //public static void MyClassInitialize(TestContext testContext)
• //{
• //}
• //
• //ClassCleanup используется для выполнения кода после завершения работы всех тестов в классе
• //[ClassCleanup()]
• //public static void MyClassCleanup()
• //{
• //}
• //
• //TestInitialize используется для выполнения кода перед запуском каждого теста
• //[TestInitialize()]
• //public void MyTestInitialize()
• //{
• //}
• //
• //TestCleanup используется для выполнения кода после завершения каждого теста
• //[TestCleanup()]
• //public void MyTestCleanup()
• //{
• //}
• //
• #endregion
•
•
• /// <summary>
• ///Тест для Main
• ///</summary>
• [TestMethod()]
• [DeploymentItem("ConsoleApplication1.exe")]
• public void MainTest()
• {
• string[] args = null; // TODO: инициализация подходящего значения
• Program_Accessor.Main(args);
• Assert.Inconclusive("Невозможно проверить метод, не возвращающий значение.");
• }
•
• /// <summary>
• ///Тест для CalculateTotalPrice
• ///</summary>
• [TestMethod()]
• [DeploymentItem("ConsoleApplication1.exe")]
• public void CalculateTotalPriceTest()
• {
• double uPrice = 5.99F; // TODO: инициализация подходящего значения
• int Qty = 12; // TODO: инициализация подходящего значения
• double expected = 80.5056F; // TODO: инициализация подходящего значения
• double actual;
• actual = Program_Accessor.CalculateTotalPrice(uPrice, Qty);
• Assert.AreEqual(expected, actual,.001);
• // Assert.Inconclusive("Проверьте правильность этого метода теста.");
• }
• }
• }