Software engineering Дмитриев Андрей Владиславович andrei-dmitriev@yandex.ru © 2006-2009 andrei-dmitriev@yandex.ru.

Презентация:



Advertisements
Похожие презентации
Модульное тестирование при помощи JUnit Андрей Дмитриев Sun Microsystems Декабрь 2008.
Advertisements

Test 6 Вопрос 1. Как можно уничтожить объект в Java? a)присвоить null всем ссылкам на объект b)вызвать Runtime.getRuntime().gc() c)вызвать метод finalize()
Java: интерфейсы, наследование, обработка исключительных ситуаций Вашенков Олег Евгеньевич.
1 Обработка исключений в Java Одно из важнейших преимуществ Java – разработанный на уровне языка механизм обработки исключений. Исключение в Java - это.
Исключения в Java. Исключения – это механизм взаимодействия между кодом, приведшим к ошибке, и кодом, обрабатывающим ошибку Исключение выбрасывается (throw),
Saint Petersburg, 2011 Java Lecture #06 Exceptions.
Методика автоматизации поиска некорректных модульных тестов Алексей Лянгузов. Sun Microsystems, Inc.
Обработка исключительных ситуаций Андрей Дмитриев 2008.
Обработка исключительных ситуаций. Синтаксис try{ операторы0; } catch (ТипИсключения1 переменная1){ операторы1; } catch (ТипИсключения2 переменная2){
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Язык программирования Java Дмитриев Андрей Владиславович 2007.
Программная инженерия Дмитриев Андрей Владиславович
Язык программирования Java Дмитриев Андрей Владиславович Май 2007.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Институт системного программирования РАН Автоматическая генерация базовых тестов для программных интерфейсов библиотек на основе заголовочных файлов Владимир.
Язык программирования Java Дмитриев Андрей Владиславович Май 2007.
Исключительные ситуации. Схема обработки исключений Try { //охраняемый блок trow (new MyException();) } catch(MyExeption e) { … } catch(Exeption e){ …
Часть 1. Основы ООП Исключения.. Структурный подход Неисправимые ошибки – вывести информацию и умереть. Исправимые ошибки – уведомить вызывающую.
Mock-объекты mock (англ.) – ложный, фиктивный, мнимый, фальшивый, поддельный.
Транксрипт:

Software engineering Дмитриев Андрей Владиславович ©

Модульное тестирование с помощью JUnit Введение Установка Возможности JUnit Пример тестового покрытия Ссылки

Введение Понятие TDD (Test Driven Development). JUnit – это библиотека, позволяющая проводить модульное тестирование Java приложений.

Обоснование Пусть есть класс, реализующий несколько мат. функций. public class CustomMath { public static int sum(int x, int y){ return x+y; } public static int division(int x, int y){ if (y == 0) { throw new IllegalArgumentException("divider is 0 "); } return x/y; }}

Вариант модульного тестирования Некоторые проверки можно поместить в сам класс. Например, так: public class CustomMath { public static void main(String[] args) { if (sum(1, 3) == 4) { System.out.println("Test1 passed."); } else {System.out.println("Test1 failed.");} try { int z = division(1, 0); System.out.println("Test3 failed."); } catch (IllegalArgumentException e){ System.out.println("Test3 passed."); }}

Выводы Иногда требуется снабжать программу модульными тестами. Тесты неудобно хранить в самой программе. Внешняя библиотека, подключенная к проекту может существенно облегчить разработку и поддержание unit тестов.

Установка Сайт проекта: После распаковки и настройки переменных окружения: varshome.html Библиотека может быть использована в совокупности с любой Java программой. Модуль JUnit входит в большинство популярных IDE.

Возможности JUnit import junit.framework.*; //подключение библиотеки //Тест должен быть наследником класса TestCase public class CustomMathTest extends TestCase { //тестирующие методы начинаются с test public void testSum() { System.out.println("sum"); int x = 0; int y = 0; int expResult = 0; int result = CustomMath.sum(x, y); //проверка условия на совпадение assertEquals(expResult, result); fail("The test case is a prototype."); } Автоматическая генерация тестов порождает следующий шаблон.

Возможности JUnit (cont.) В конце обычно происходит сравнение фактического результата с ожидаемым. //тестирующие методы начинаются с test public void testDivision() { System.out.println("division"); int x = 0; int y = 0; int expResult = 0; int result = CustomMath.division(x, y); //проверка условия на совпадение assertEquals(expResult, result); fail("The test case is a prototype."); }

Настоящий тестовый случай Один из тестов может выглядеть так: public void testSum() { System.out.println("sum"); int x = 1; int y = 3; int expResult = 4; int result = CustomMath.sum(x, y); assertEquals(expResult, result); }

Обработка исключений Запуск теста для метода division(x, y) выдал ошибку: Testcase: testDivision(simplemathapp.CustomMathTest):Caused an ERROR divider is null java.lang.IllegalArgumentException: divider is null at simplemathapp.CustomMath.division(CustomMath.java:42) at simplemathapp.CustomMathTest.testDivision(CustomMathTest.jav a:38)

Обработка исключений (cont.) Причина в том, что тест некорректно обрабатывает деление на ноль: public void testDivision() { System.out.println("division"); int x = 0; int y = 0; int expResult = 0; int result = CustomMath.division(x, y); assertEquals(expResult, result); } Вместо сравнения числовых результатов нужно ожидать исключение.

Обработка исключений (cont.) В случае исключения мы не делаем ничего. Если исключения нет – сообщаем об ошибке. public void testDivision() { int x = 0; int y = 0; int expResult = 0; try { int result = CustomMath.division(x, y); fail("Exception expected"); } catch (IllegalArgumentException e){ System.out.println("pass"); }

Перспективы Версия JUnit 4.0 доступна на сайте проекта: использует аннотации, отслеживает истечение времени, возможность определять методы инициализации тестовой сюиты.

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

Выводы Наличие хорошего набора тестов важно для контроля качества программы. Разработка тестов может отнимать немного времени. Автоматизация тестов – главный приоритет для успешного тестирования.

Ссылки

Q&A

Дмитриев Андрей Владиславович © Спасибо!