Академический Документы
Профессиональный Документы
Культура Документы
2.a JUnit
2.a JUnit
Сергей Довгалец
Unit testing
Модульное тестирование (unit testing,
юнит-тестирование) – вид тестирования,
направленный на оценку корректности
исходного кода программы.
Высокоуровневую
Отдельные
логику
методы
приложения
Взаимодействие Пользовательский
объектов интерфейс
JUnit – фреймворк модульного тестирования
ПО на языке Java.
Класс
Взаимодействие
В рамках модульного классов
тестирования проверкам
подвергаются Геттеры и сеттеры
Конструкторы
Исключения
Внешние зависимости
Как тестировать…
• Метод: Вызвать метод, проверить возвращённый результат.
• Метод, который ничего не возвращает: вызвать метод, проверить «сторонние
изменения».
• Класс: определить ситуации, когда объект изменяет своё состояние, проверить
соответствующие сценарии(инициализация, выполнение методов и т.п.).
• Взаимодействие классов: определить ситуации, когда объекты взаимодействуют,
провести взаимодействие, проверить изменения в объектах.
• геттеры и сеттеры (НЕ НАДО тестировать простые get* и set*): вызвать сеттер,
вызвать геттер, проверить, что переданное в сеттер верно возвращено геттером.
• Конструктор: создать объект, проверить те изменения, которые производит
конструктор.
• Исключения: вызвать исключение, проверить факт его возникновения.
• Внешние зависимости: изолировать зависимость, вызвать метод, проверить
поведение объекта.
Понятие аннотации
Аннотации (annotations) – метаданные,
добавляемые в исходный код программы.
Предоставление
метаданных
Решаемые задачи
инструментам генерации
кода, тестирования и т.п.
Использование в коде во
время выполнения
программы для принятия
различных решений
Аннотации в JUnit: fixtures
Фиксации (fixtures) – методы,
выполняющие подготовку к
выполнению тестового метода и
«уборку» после его выполнения.
Фиксация Фиксация
Аннотации в JUnit: fixtures
@Test
public void testTwo()
{
System.out.println("Test 2");
}
@Test
public void testThree()
{
System.out.println("Test 3");
}
Аннотации в JUnit: tests
@Test(expected=ArithmeticException.class)
public void tst_weight_compare()
{
Animal cat = new Animal(0, 0);
assertEquals(2.0, cat.weight_compare(ghost), 0.01);
}
Аннотации в JUnit: tests + timeouts
Тестируемый метод:
}
Аннотации в JUnit: tests + parameters
@RunWith(value = Parameterized.class)
public class tstIncrementParameterized {
@Parameterized.Parameters
public static Collection set_of_parameters() {
return Arrays.asList(new Object[][]{
{3, 2},
{4, 3}
}
);
}
@Before
public void setUp() {
ip = new IncrementParameterized();
}
@Test
public void tstIncrementParameterized() {
assertEquals(expected_result, ip.increment(pass_value));
}
}
Аннотации в JUnit: suites
@Test
public void tstAllAsserts()
{
assertEquals(4.0, 2.0*2.0, 0.0001);
assertEquals("Err!", 4.0, 2.0*2.0, 0.0001);
assertEquals(4, 2*2);
}
Истинность: assertTrue
@Test
public void tstAllAsserts()
{
assertThat(0, is(1));
assertThat(0, is(not(1)));
}
Сценарии в JUnit
Animal cat;
Animal mouse;
@Before
public void createCreatures() throws Exception {
cat = new Animal(1, 10);
mouse = new Animal(2, 1);
cat.born();
mouse.born();
}
@Test
public void tstCatEatMouse()
{
assertEquals(0.5, cat.eat(mouse, mouse.getWeight()), 0.01);
}
@Test
public void tstMouseEatCat()
{
assertEquals(0.5, mouse.eat(cat, cat.getWeight()), 0.01);
}
@After
public void killCreatures() throws Exception {
cat.die();
mouse.die();
cat = null;
mouse = null;
}
}
Практическое занятие
Написать к своим
программам модульные
тесты.
Например: Для
тестирования написать игру
в «города» (человек и
компьютер по очереди
называют «город на
последнюю букву»,
например «Москва –
Астрахань – Новосибирск –
Киев – Вильнюс»).