Модельное тестирование с помощью библиотеки NUnit

Содержание

Слайд 2

Содержание

Мифы о тестировании
Модульное тестирование с помощью NUnit
Рекомендации к написанию тестов
Полезная информация о

Содержание Мифы о тестировании Модульное тестирование с помощью NUnit Рекомендации к написанию
C#

Слайд 3

Введение

Что такое модульное тестирование?
Тестирование отдельных функций системы.
Как правило выполняется разработчиком модуля.
Может быть

Введение Что такое модульное тестирование? Тестирование отдельных функций системы. Как правило выполняется
легко автоматизировано.
Закладывает основу для регрессионного тестирования приложения.

Слайд 4

Мифы о тестировании

«У меня нет времени на тесты».
«Тестирование – скучное и не

Мифы о тестировании «У меня нет времени на тесты». «Тестирование – скучное
творческое занятие».
«Мой код и так отлично работает».
«Это работа для отдела тестирования. У них получится лучше».

Слайд 5

Миф №1 «У меня нет времени на тесты»

Написание тестов стабилизирует код и позволяет

Миф №1 «У меня нет времени на тесты» Написание тестов стабилизирует код
существенно сократить время отладки.

Слайд 6

Пример программы

Пусть есть класс, реализующий математические функции.

public class Calculator {
public

Пример программы Пусть есть класс, реализующий математические функции. public class Calculator {
static int Sum(int x, int y){
return x+y; //возвращает результат сложения двух чисел
}
}

Слайд 7

Вариант модульного тестирования №1

Некоторые проверки можно поместить в сам класс.

public class Calculator

Вариант модульного тестирования №1 Некоторые проверки можно поместить в сам класс. public
{
public static void main(String[] args) {
if (Sum(1, 3) == 4) { //проверяем, что при сложении 1 и 3 //нам возвращается 4
Console.WriteLine("Test1 passed.");
} else {Console.WriteLine("Test1 failed.");
}
}

Слайд 8

Наблюдения
Тесты неудобно хранить в самой программе.
Выход - внешняя библиотека, подключенная к проекту
Часто

Наблюдения Тесты неудобно хранить в самой программе. Выход - внешняя библиотека, подключенная
используемые библиотеки модульного тестирования: NUnit, CUnit, JUnit, …

Слайд 9

Библиотека Nunit

Библиотека Nunit

Слайд 10

using System;
using NUnit.Framework;
[TestFixture]
public class LargestTest
{
[Test]
public void LargestOfNumber()
{
Assert.Greater(2, 1);
}
}

Пример тестового класса

using System; using NUnit.Framework; [TestFixture] public class LargestTest { [Test] public void

Слайд 11

Tестовый проект

Как правило, имя_тестируемого_проекта + "Test“ (н-р CalculatorTest.dll)
Тот же солюшен, что и

Tестовый проект Как правило, имя_тестируемого_проекта + "Test“ (н-р CalculatorTest.dll) Тот же солюшен,
тестируемый проект
Разметка атрибутами NUnit
TestFixture
TestFixtureSetUp
SetUp
Test
TearDown
TestFixtureTearDown

Слайд 12

Атрибуты NUnit

Атрибуты NUnit

Слайд 13

Проверка условий (Assert)

Класс Assert
Assert.AreEqual – эквивалентны ли 2 параметра метода (пожалуй, самый

Проверка условий (Assert) Класс Assert Assert.AreEqual – эквивалентны ли 2 параметра метода
популярный ассёрт)
IsTrue (IsFalse) – является ли выражение истинным (ложным)
IsNull (IsNotNull) – является ли пaраметр null
Contains – для коллекций
и некоторые другие, которые редко имеет смысл использовать

Слайд 14

Использование NUnit

//подключение библиотеки
using NUnit.Framework;
//Тест должен быть помечен атрибутом [TestFixture]
[TestFixture]
public class CalculatorTest

Использование NUnit //подключение библиотеки using NUnit.Framework; //Тест должен быть помечен атрибутом [TestFixture]
{
//тестирующие методы помечены атрибутом [Test] и начинаются с префикса “Test”
[Test]
public void TestSum() {
int x = 3;
int y = 5;
int expResult = 8;
int result = Calculator.Sum(x, y);
//проверка условия на совпадение
Assert.AreEqual(expResult, result);
//Assert.AreEquals(Calculator.Sum(3, 5));
}

Слайд 15

Причины ошибки тестов

Неправильно работает тестируемый метод.
Методы, вызываемые из тестируемого, генерируют исключение по

Причины ошибки тестов Неправильно работает тестируемый метод. Методы, вызываемые из тестируемого, генерируют
каким-то причинам.
Некорректно написан тест.

Слайд 16

Рекомендации к написанию тестов

Название тестового метода.
Размер теста.
Ожидаемый результат.
Тестовые данные.

Рекомендации к написанию тестов Название тестового метода. Размер теста. Ожидаемый результат. Тестовые данные.

Слайд 17

Название тестового метода

Имя теста должно описывать:
Тестируемую функциональность.
Возможно, условия тестирования.

Название тестового метода Имя теста должно описывать: Тестируемую функциональность. Возможно, условия тестирования.

Слайд 18

Размер теста

Тестовый метод должен быть коротким.
Дополнительные проверки -> вспомогательные методы.
Количество проверок

Размер теста Тестовый метод должен быть коротким. Дополнительные проверки -> вспомогательные методы.
(assert) должно быть минимальным.
Иначе сложно будет найти причину ошибки.
Каждый тест - одна единица бизнес-логики:
Простой метод.
Один из исходов конструкции if..else.
Один из случаев (case) блока switch.
Исключение, обрабатываемое блоком try…catch
Исключение, генерируемое (throw) в методе.

Слайд 19

Ожидаемый результат
public void TestBalance1() {
Account account = new Account();
account.Deposit(10);
account.Withdraw(5);

Ожидаемый результат public void TestBalance1() { Account account = new Account(); account.Deposit(10);
account.Deposit(6);
int expectedBalance = 11; //правильно
Assert.AreEqual(expectedBalance, account.Balance);
}
public void TestBalance2() {
Account account = new Account();
account.Deposit(10);
account.Withdraw(5);
account.Deposit(6);
int expectedBalance = 10 - 5 + 6; //неправильно
Assert.AreEqual(expectedBalance, account.Balance);
}

Ожидаемый результат должен быть константой.
Не следует в тесте повторять тестируемую логику, подсчитывая результат.

Слайд 20

Тестовые данные
public void TestIsPasswordValid() { Assert.IsTrue(user.IsPasswordValid("abcdef"));
//понять,правильно ли написан тест, можно лишь

Тестовые данные public void TestIsPasswordValid() { Assert.IsTrue(user.IsPasswordValid("abcdef")); //понять,правильно ли написан тест, можно
отыскав где создается объект user
Assert.IsFalse(user.IsPasswordValid("123456"));
}

Тестовые данные и ожидаемый результат должны быть рядом.
Если объект user удобнее создавать вне тестового метода, следует использовать именованные константы.

Слайд 21

Тестовые данные (cont.)
public void TestIsPasswordValid() {
User user = new User("Name",

Тестовые данные (cont.) public void TestIsPasswordValid() { User user = new User("Name",
"abcdef");
Assert.IsTrue(user.IsPasswordValid("abcdef"));
//здесь все понятно
Assert.IsFalse(user.IsPasswordValid("123456"));
}
public void TestIsPasswordValid() { Assert.IsTrue(user.IsPasswordValid(validPassword));
//здесь тоже
Assert.IsFalse(user.IsPasswordValid(wrongPassword));
}
Имя файла: Модельное-тестирование-с-помощью-библиотеки-NUnit.pptx
Количество просмотров: 127
Количество скачиваний: 1