Try English version of Quizful



Раздаем бесплатные Q! подробности в группе Quizful.Alpha-test
Партнеры
Рекрутерам: Прескрининг кандидатов about
Топ контрибуторов
loading
loading
Знаете ли Вы, что

В разделе "Статьи" можно найти обучающие статьи по информационным технологиям, а также узнать о новостях сервиса Quizful.

Лента обновлений
ссылка 20:57:36
Комментарий от Recrut_rf:
Спасибо, сохранил функцию, может пригодится когда - ни...
ссылка 20:53:59
Добавлен вопрос в тест ASP.NET - Основы
ссылка 08:41:09
Комментарий от Krosster:
Гарний сайт для новачків. Правда деякі питання підступн...
ссылка Apr 22 22:06
Добавлен вопрос в тест SQL - Средний уровень
ссылка Apr 22 10:13
Комментарий от Entrery:
вроде выбрал ООП в сишарпе, а тут вопросы по джаве...
Статистика

Тестов: 153, вопросов: 8596. Пройдено: 402471 / 1961093.

Модульное тестирование с jUnit4

head tail Статья
категория
Java
дата28.03.2013
авторspayker
голосов25
Фреймворк jUnit является весьма удачным решением задач, связанных с тестированием java приложений. Растущая популярность привела к созданию подобных фреймворков для других языков. Вот некоторые из них:

1) Для С++ была реализована CPPUnit;
2) JavaScript может использоваться совместно с JSUnit;
3) Для C# разработчики создали NUnit;
4) Perl скрипты можно тестировать с помощью Test::Unit;
5) PHP код могут тестировать с помощью PHPUnit модуля;

jUnit применяется для модульного тестирования, которое позволяет проверять на правильность отдельные модули исходного кода программы. Преимущество данного подхода заключается в изолировании отдельно взятого модуля от других. При этом, цель такого метода позволяет программисту удостовериться, что модуль, сам по себе, способен работать корректно. jUnit представляет из себя библиотеку классов. Для демонстрации основных возможностей этой библиотеки, можно написать примитивный класс:

public class Salary { 
 
private int value; 
private String type; 
 
public Salary(int v, String t){ 
value = v; 
type = t; 

 
public Salary add(Salary s){ 
return new Salary(value + s.getValue(), type); 

 
public int getValue(){ 
return value; 


Если ранние версии jUnit (3.8 и ниже) требовали наличие класса-наследника junit.framework.TestCase, то в более поздних версиях объявление теста сводится к маркировке тестового метода аннотацией @Test. Создадим несколько тестовых методов:

import static org.junit.Assert.*; 
import org.junit.Test; 
 
public class TestSalary { 
@Test 
public void testAdd() { 
Salary m1 = new Salary(12"USD"); 
Salary m2 = new Salary(14"USD"); 
Salary expected = new Salary(26"USD"); 
Salary result = m1.add(m2); 
assertFalse(expected.equals(result)); 

}


Метод assertFalse проверяет, является ли результат выражения в скобках неверным. При запуске теста последний пройдет успешно, т.к. результат - не равный. В классе "org.junit.Assert" предусмотрены и другие методы:
- assertEquals(int1, int2) или утверждение эквивалентности. Проверяет на равенство двух значений любого примитивного типа;
- assertFalse, assertTrue(condition) или булевые утверждения. Вместо “condition” необходимо вставить проверяемое условие;
- assertNull, assertNotNull(obj) относятся к Null утверждениям и проверяет содержимое объектной переменной на Null значение;
- assertSame(obj1, obj2) утверждение позволяет сравнивать объектные переменные.

Для каждого из assert-ов вы можете добавить первым параметром строку, которая выведется, если тест провалится: assertEquals (“Test is failed”, int1, int2).

Для аннотации @Test существуют дополнительные опции. Например:

@Test(expected = Exception.class
public void testDiv(){ 
Salary m1 = new Salary(12"USD"); 
Salary m2 = new Salary(0"USD"); 
int result = m1.getValue()/m2.getValue(); 
}


expected = Exception.class” означает, что мы ждем появление исключения Exception. Если исключение не будет выброшено, то такое поведение тестируемой функции будет неверным и тест провалится.

Если какой-либо тест по какой-либо серьезной причине нужно отключить (например, этот тест постоянно валится, а исправлять его пока некогда) его можно зааннотировать с помощью @Ignore:

import org.junit.Ignore; 
 
import org.junit.Test; 
 
@Ignore 
@Test(timeout = 1000
public void testAdd() { 
//
код 
}


Также, если поместить эту аннотацию на класс, то все тесты в этом классе будут отключены. Помимо этого есть также очень интересная аннотация @Test(timeout = 1000). По истечении указанного в скобках времени, если тест не пройден, он считается неудачным. Время указывается в миллисекундах.

В jUnit для задания определенных стартовых условий вам могут пригодится т.н. фикстуры. Под этим термином следует понимать состояние среды тестирования, которое требуется для успешного выполнения тестового метода. Например, это может быть набор каких-либо объектов или состояние базы данных. Фикстуры помогают многократно использовать программный код за счет правила, которое гарантирует исполнение определенной логики до или после исполнения теста. В предшествующих версиях JUnit это правило неявно подразумевалось вне зависимости от реализации фикстур разработчиком. В версии JUnit 4 фикстуры указываются через аннотации: @Before, @After, @BeforeClass, @AfterClass.

@Before используется для выполнения множества предварительных условий перед выполнением теста. Например, если есть необходимость записать данные в БД или создать пользователя перед выполнением теста. Метод, помеченный @Before будет выполняться перед выполнением каждого теста в классе.

Метод, помеченный @After запускается после выполнения каждого теста. Например, если нужно очищать переменные после выполнения каждого теста, то этой аннотацией можно маркировать метод, имеющий необходимый код. Более того, можно маркировать одновременно несколько методов аннотациями @Before и @After. Однако, следует иметь в виду, что эти методы могут запускаться в различном порядке. Для задания многократных фикстур используются аннотации @Before и @After:

import org.junit.After; 
 
import org.junit.Before; 
 
@Before 
public void setup(){ 
Money m1 = new Money(12"USD"); 
Money m2 = new Money(14"USD"); 

 
@After 
public void setup(){ 
     m1 = null
     m2 = null
}


Также есть такие аннотации, как @BeforeClass, @AfterClass (т.н. однократные фикстуры). Они необходимы, если вам нужно вызвать фикстуру всего один раз. Еще jUnit предоставляет функцию параметризированного тестирования. Ознакомление с этой функцией вы можете начать здесь.

Существует альтернативный фреймворк под названием TestNG. Он разрабатывается сообществом testing.org. Во многом является аналогом jUnit.

Более подробное его описание находится здесь.

Фреймворк jUnit4 был значительно улучшен и расширен в 4-ой версии. Введение аннотаций позволило избавиться от ряда рутинных обязательств при написании тестов. На данный момент можно пользоваться уже 12-ым билдом. Данная утилита разрабатывается группой разработчиков-энтузиастов и .

http://Junit.org – основной сайт сообщества-основателя jUnit фреймворка

http://testng.org/doc/misc.html - документация по всем возможностям TestNG фреймворка.

http://qatestlab.com/ru/pressroom/QA-Testing-Materials/Unit-Testing-Overview/ - коротко о модульном тестировании

Если Вам понравилась статья, проголосуйте за нее

Голосов: 25  loading...
twentyyears   mechanik   RedMantis   jauhien   user12   Belleruche   olsan   Skydreamer   Zibet   dazerty   marengo   orion07   Loe   TeaWitch   polinkot   sophie   Victor_MM   NaRina   SamTan   barban   Nadya2308   kostya_bakay   jshvatskaya_1   barstyler   EvgenyKlub