лаб7. Отчет защищен с оценкой преподаватель ст преподаватель
![]()
|
ГУАП КАФЕДРА № 44 ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ ПРЕПОДАВАТЕЛЬ
РАБОТУ ВЫПОЛНИЛ
Санкт-Петербург 2021 Цель работы: приобретение практических навыков в области тестирования программного обеспечения, изучение возможностей модульного тестирования в MS Visual Studio. Ход работы: Сначала я скачала проект с https://github.com/microsoft/calculator , настроила и открыла его в среде разработки Visual Studio. Далее запустила вложенные тесты. Выполнились все Unit тесты, UI тесты выполнились частично (рисунок 1). ![]() Рисунок 1. Выполнение тестов Захожу в Solution Items > Calc Manager > CEngine > CalcInput.cpp Теперь меняю значение с 0 на 1. Данное число влияет на определение знака числа и некоторых операций с ним (рисунок 2,3). ![]() Рисунок 2. Код до изменения ![]() Рисунок 3. Код после изменения Пробую запустить тесты. Возникло 6 ошибок, остальные тесты прошли без ошибки, потому что или они не влияли на работу теста, или значение было в пределах допустимого (рисунок 4). Имеем Assert failed в функциях: 1. TryAddDigitMaxCount 2. TryAddDigitRolloverBaseCheck 3. TryAddDigitRolloverDecimal 4. CalculatorManagerTestMaxDigitsReached 5. CalculatorManagerTestMaxDigitsReached_LeadingDecimal 6. CalculatorManagerTestMaxDigitsReached_TrailingDecimal ![]() Рисунок 4. Ошибки при запуске тестов Затем, создадим собственный проект, в котором описан простой калькулятор сложения, вычитания, умножения и деления на языке программирования C#. ICalculator.cs namespace Domain { public interface ICalculator { double Sum(double a, double b); double Substract(double a, double b); double Multiply(double a, double b); double Divide(double a, double b); } } Calculator.cs namespace Domain { public class Calculator : ICalculator { public double Sum(double a, double b) { return a + b; } public double Substract(double a, double b) { return a - b ; } public double Multiply(double a, double b) { return a * b; } public double Divide(double a, double b) { return a / b; } } } Program.cs using System; using Domain; namespace ConsoleApp { class Program { static void Main(string[] args) { // Ввод данных Console.WriteLine("Введите первое число"); var a = InputDouble(); Console.WriteLine("Введите второе число"); var b = InputDouble(); Console.WriteLine("Введите знак операции"); var operation = Console.ReadLine(); // Расчёт double result; var calculator = new Calculator(); switch (operation) { case "+": result = calculator.Sum(a, b); break; case "-": result = calculator.Substract(a, b); break; case "*": result = calculator.Multiply(a, b); break; case "/": if (b == 0) throw new Exception(); result = calculator.Divide(a, b); break; default: throw new ArgumentOutOfRangeException(nameof(operation)); } // Вывод Console.WriteLine($"Результат операции {operation} над {a} и {b} равен {result}"); } private static double InputDouble() { var input = Console.ReadLine(); var result = double.Parse(input); return result; } } } Создадим для нашего калькулятора тест, который будет проверять правильность выполнения операций, а также проверим результат деления на 0. CalculatorTests.cs using Domain; using NUnit.Framework; namespace Tests1 { public class CalculatorTests { public const double positive = double.PositiveInfinity; public const double negative= double.NegativeInfinity; [TestCase(0, 0, 0)] [TestCase(0, 42, 42)] [TestCase(42, 0, 42)] [TestCase(2, 3, 5)] [TestCase(-2, 10, 8)] [TestCase(-2, 1, -1)] public void SumTests1(double a, double b, double expected) { var actual = new Calculator().Sum(a, b); Assert.AreEqual(expected, actual); } [TestCase(5, 1, 4)] [TestCase(42, 0, 42)] public void SubstractTests1(double a, double b, double expected) { var actual = new Calculator().Substract(a, b); Assert.AreEqual(expected, actual); } [TestCase(42, 0, 0)] [TestCase(42, 1, 42)] [TestCase(2, 3, 6)] public void MultiplyTests1(double a, double b, double expected) { var actual = new Calculator().Multiply(a, b); Assert.AreEqual(expected, actual); } [TestCase(42, 1, 42)] [TestCase(8, 2, 4)] [TestCase(5, 2, 2.5d)] [TestCase(5,0,double.PositiveInfinity)] public void DivideTests1(double a, double b, double expected) { var actual = new Calculator().Divide(a, b); Assert.AreEqual(expected, actual); } [TestCase(42, 1, 42)] [TestCase(8, 2, 4)] [TestCase(5, 2, 2.5d)] [TestCase(5, 0, double.PositiveInfinity)] public void DivideException1(double a,double b,double expected) { var actual = new Calculator().Divide(a, b); if (b == null) throw new System.EntryPointNotFoundException(); Assert.AreEqual(expected, actual); } } } ![]() ![]() Рисунок 5. Результат работы программы ![]() Рисунок 6. Результат работы теста Изменим код так, чтобы тест перестал выполняться, в ожидаемый результат деления на 0 запишем 0. [TestCase(42, 1, 42)] [TestCase(8, 2, 4)] [TestCase(5, 2, 2.5d)] [TestCase(5, 0, 0)] // 5/0 != 0 public void DivideTests1(double a, double b, double expected) { var actual = new Calculator().Divide(a, b); Assert.AreEqual(expected, actual); } ![]() Рисунок 8. Ошибка прохождения теста Вывод: в ходе данной лабораторной работы я приобрела практические навыки в области тестирования программного обеспечения, изучила возможности модульного тестирования в MS Visual Studio. Попробовала разобраться в коде тестов калькулятора Microsoft и написала свой модульный тест. |