Тестування Java коду за допомогою JUnit – Туторіал. Тест знань Java - Основи Онлайн тест java початковий рівень

Тестування далеко не завжди буває веселим та цікавим. Цей процес зазвичай досить тривалий і часом сповнений монотонної роботи. Здається, ще зовсім недавно програмісти користувалися стандартним висновком або дебаггером для тестування java класів.

У цій статті я опишу бібліотеку JUnit 4, яка багато в чому спрощує та автоматизує процес написання тестів.

Для демонстрації основних можливостей JUnit Framework, напишемо примітивний клас мовою Java і знущатимемося над ним. Цей клас матиме два методи - знаходження факторіалу невід'ємного числа та суми двох чисел. Крім того, в екземплярі класу буде лічильник викликів методів.

Public class MathFunc ( int calls; public int getCalls() ( return calls; ) public long factorial(int number) ( calls++; if (number 1) ( for (int i = 1; i

Тепер напишемо Unit тести. Для цього створимо клас із деякою кількістю тестових методів. Звичайно, клас може містити і стандартні допоміжні способи. Щоб runner тестів міг визначити, хто є хто, тестові методи необхідно помічати антацією @Test.

Анотації можуть бути проставлені такі параметри:

  • expected - вказуємо який виняток буде згенеровано методом (див. приклад нижче);
  • timeout - через який час у мілісекундах припинити виконання тесту та зарахувати його як неуспішний.

Якщо ви хочете вказати, що певний тест необхідно пропустити, то позначте його анотацією @Ignore. Хоча можна просто видалити інструкцію @Test.

Буває таке, що для виконання кожного тестового сценарію вам потрібен певний контекст, наприклад, заздалегідь створені екземпляри класів. А після виконання необхідно звільнити зарезервовані ресурси. У цьому випадку вам знадобляться антотації @Before і @After. Метод, помічений @Before, буде виконуватися перед кожним тестовим випадком, а метод, помічений @After - після кожного тестового випадку.

Якщо ж ініціалізацію та звільнення ресурсів потрібно зробити всього один раз – відповідно до та після всіх тестів – то використовуйте пару анотацій @BeforeClass та @AfterClass.

А ось і сам тестовий клас із декількома тестовими сценаріями:

Public class MathFuncTest ( private MathFunc math; @Before public void init() ( math = new MathFunc(); ) @After public void tearDown() ( math = null; ) @Test public void calls() ( assertEquals(0, math .getCalls()), math.factorial(1); assertEquals(1, math.getCalls());math.factorial(1); ( assertTrue(math.factorial(0) == 1); assertTrue(math.factorial(1) == 1); assertTrue(math.factorial(5) == 120); ) @Test(expected = IllegalArgumentException.class) public void factorialNegative() ( math.factorial(-1); ) @Ignore @Test public void todo() ( assertTrue(math.plus(1, 1) == 3); ) )

Метод calls тестує правильність лічильника дзвінків. Метод factorial перевіряє правильність обчислення факторіалу для деяких стандартних значень. Метод factorialNegative перевіряє, що для негативних значень факотріалу буде кинуто IllegalArgumentException. Метод todo буде проігноровано. Спробуйте прибрати анотацію @Ignore, коли експериментуватимете з кодом.

Метод assertTrue перевіряє, чи є результат виразу вірним. Деякі інші методи, які можуть стати в нагоді:

  • assertEquals - очікуваний результат та отриманий результат збігаються;
  • assertNull - результатом виразу є null;
  • assertNotNull - результат виразу відмінний від null;
  • AssertSame - очікуваний і отриманий об'єкт є одним і тим же об'єктом.
  • fail – метод генерує виняток AssertionError – додаємо туди, куди не повинен дійти хід виконання програми.

В нашому сучасному світі IDE вміють знаходити та просто запускати тести в проекті. Але що робити, якщо ви хочете запустити їх вручну за допомогою програмного коду. Для цього можна скористатися Runner"ом. Бувають текстовий - junit.textui.TestRunner, графічні версії - junit.swingui.TestRunner, junit.awtui.TestRunner.

Але більш сучасний метод - це використання класу JUnitCore. Додайте наступний метод main у клас MathFuncTest:

Public static void main(String args) throws Exception ( JUnitCore runner = new JUnitCore(); Result result = runner.run(MathFuncTest.class); System.out.println("run tests: " + result.getRunCount()); System.out.println("failed tests: " + result.getFailureCount()); System.out.println("ignored tests: " + result.getIgnoreCount()); System.out.println("success: " + result .wasSuccessful()); )

І результат виконання:

Run tests: 3 failed tests: 0 ignored tests: 1 success: true

У більш ранніх версіях JUnit для написання тестового класу необхідно створити спадкоємця junit.framework.TestCase. Потім необхідно було визначити конструктор, який приймає як параметр String - назву методу - і передати його батьківському класу. Кожен тестовий спосіб повинен був починатися з префіксу test. Для ініціалізації та звільнення ресурсів використовувалися методи setUp та tearDown. Коротше, жах. Ну, а зараз все просто, так.

Ось і все сьогодні. Впевнений, JUnit Framework багато в чому допоможе вам. Коментарі та питання щодо статті вітаються.

JUnit- Бібліотека для модульного тестування програм Java. Створений Кентом Беком та Еріком Гаммою, JUnit належить сім'ї фреймворків xUnit для різних мов програмування, що бере початок у SUnit Кента Бека для Smalltalk. JUnit породив екосистему розширень - JMock, EasyMock, DbUnit, HttpUnit і т.д.

Бібліотека JUnitбула портована іншими мовами, включаючи PHP (PHPUnit), C# (NUnit), Python (PyUnit), Fortran (fUnit), Delphi (DUnit), Free Pascal (FPCUnit), Perl (Test::Unit), C++ (CPPUnit) , Flex (FlexUnit), JavaScript (JSUnit).

JUnit– це Java фреймворк для тестування, тобто тестування окремих ділянок коду, наприклад методів або класів. Досвід, отриманий під час роботи з JUnit, важливий у розробці концепцій тестування програмного забезпечення.

Приклад тесту JUnit

Import org.junit.Test; import junit.framework.Assert; public class MathTest ( @Test public void testEquals() ( Assert.assertEquals(4, 2 + 2); Assert.assertTrue(4 == 2 + 2); ) @Test public void testNotEquals() ( Assert.assertFalse(5 = = 2 + 2);))

Необхідність використання JUnit

JUnit дозволяє у будь-який момент швидко переконатися у працездатності коду. Якщо програма перестав бути дуже простий і включає безліч класів і методів, то її перевірки може знадобитися значний час. Звичайно, цей процес краще автоматизувати. Використання JUnitдозволяє перевірити код програми без значних зусиль та не займає багато часу.

Юніт тестикласів і функцій є своєрідною документацією до того, що очікується в результаті їх виконання. І не просто документацією, а документацією, яка може автоматично перевіряти код на відповідність пред'явленим функціям. Це зручно і часто тести розробляють як разом, так і до реалізації класів. Розробка через тестування – дуже популярна технологія створення серйозного програмного забезпечення.

Види тестування та місце JUnit тестування у класифікації

Тестування програмного забезпечення можна розділити на два види:

  • тестування чорної скриньки;
  • тестування білої скриньки.

Під час тестування програми як чорної скриньки внутрішня структура програми до уваги не приймається. Все, що має значення, це функціональність, яку програма має забезпечити. При тестуванні програми як ящика до уваги береться внутрішня структура, тобто. клас та методи. Крім цього, тестування можна розділити на чотири рівні:

  • юніт тести – тестування окремих ділянок коду;
  • інтеграційне тестування - тестування взаємодії та спільної роботи компонентів;
  • системне тестування – тестування всієї системи як цілого;
  • приймальне тестування – підсумкове тестування готової системи на відповідність вимогам.

Юніт тестування за визначенням є тестуванням білої скриньки.

Використовується unit тестування у двох варіантах – JUnit 3 та JUnit 4. Розглянемо обидві версії, так як у старих проектах досі використовується 3-я версія, яка підтримує Java 1.4.

JUnit 3

Для створення тесту слід успадковувати тест-клас TestCase, перевизначити методи setUp і tearDown за необхідності, та й найголовніше - розробити тестові методи, найменування яких має починатися з абрівіатури "test". При запуску тесту спочатку створюється екземляр тест-класу (для кожного тесту в класі окремий екземпляр класу), потім виконується метод setUp, запускається сам тест, та й на завершення виконується метод tearDown. Якщо будь-який з методів викликає виняток, тест вважається таким, що провалився.

Примітка: методи тестування повинні бути public void, можуть бути static.

Тести складаються з виконання певного коду та перевірок. Перевірки найчастіше виконуються за допомогою класу Assertхоча іноді використовують ключове слово assert.

Як приклад розглянемо утиліту для роботи з рядками, що включає методи для перевірки порожнього рядка та подання послідовності байт у вигляді 16-річного рядка:

Public class JUnit3StringUtilsTest extends TestCase ( private final Map toHexStringData = New HashMap(); protected void setUp() throws Exception ( toHexStringData.put("", New byte); 13, 17, 45, 127)); clear(); ) public void testToHexString() ( for (Iterator iterator = toHexStringData.keySet().iterator(); iterator.hasNext();) ( final String expected = (String)iterator.next(); final byte testData = (byte)toHexStringData.get(expected); final String actual = StringUtils.toHexString(testData); assertEquals(expected, actual); ) ) //... )

Додаткові можливості, TestSuite

JUnit 3 має кілька додаткових можливостей. Наприклад, можна групувати випробування. Для цього необхідно використати клас TestSuite:

Public class JUnit3StringUtilsTestSuite extends TestSuite ( public JUnit3StringUtilsTestSuite() ( addTestSuite(StringUtilsJUnit3Test.class); addTestSuite(OtherTest1.class); addTestSuite(OtherTest2.class); ) )

Можна виконання тесту повторити кілька разів. Для цього використовується RepeatedTest:

Public class JUnit3StringUtilsRepeatedTest extends RepeatedTest ( public JUnit3StringUtilsRepeatedTest() ( super(new JUnit3StringUtilsTest(), 100); ) )

Наслідуючи тест-клас від ExceptionTestCase, можна перевірити код на викид виключення:

Public class JUnit3StringUtilsExceptionTest extends ExceptionTestCase ( public JUnit3StringUtilsExceptionTest(final String name) ( super(name, NullPointerException.class); ) public void testToHexString() ( StringUtils.toHexString(null); ) )

Як видно з прикладів, все досить просто і нічого зайвого - мінімум коду для JUnit тестування.

JUnit 4

JUnit 4 додана підтримка нових можливостей з Java 5.0; Тести можуть бути оголошені за допомогою анотацій. При цьому існує зворотна сумісність із попередньою версією фреймворку. Майже всі розглянуті вище приклади будуть працювати і в JUnit 4 крім RepeatedTest, який відсутній в новій версії.

Які зміни з'явилися в JUnit 4? Розглянемо той самий приклад, але вже з використанням нових можливостей:

Public class JUnit4StringUtilsTest extends Assert ( private final Map toHexStringData = новий HashMap (); @Before public static void setUpToHexStringData() ( toHexStringData.put(", new byte); toHexStringData.put("01020d112d7f", new byte(1,2,13,17,45,127)); toHexStringData.put("10f , new byte(0,-1,-14,17,-128)); //... ) @After public static void tearDownToHexStringData() ( toHexStringData.clear(); ) @Test public void testToHexString() ( for (Map.Entry entry: toHexStringData.entrySet()) ( final byte testData = entry.getValue(); final String expected = entry.getKey(); final String actual = StringUtils.toHexString(testData); assertEquals(expected, actual); ) ) )

Що змінилося в JUnit 4?

  • Для спрощення роботи можна успадковуватись від класу Assertхоча це необов'язково.
  • Анотація @Beforeозначає методи, які будуть викликані перед виконанням тестів. Методи мають бути public void. Тут зазвичай розміщуються предустановки для тесту, у разі це генерація тестових даних (метод setUpToHexStringData).
  • Можна використовувати інструкцію @BeforeClassяка позначає методи, які будуть викликані до створення екземпляра тест-класу; методи повинні бути public static void. Дану інструкцію (метод) має сенс використовувати для тестування у разі, коли клас містить кілька тестів, використовують різні предустановки, або коли кілька тестів використовують одні й самі дані, ніж витрачати час їх створення для кожного тесту.
  • Анотація @Afterпозначає методи, викликані після виконання тестів. Методи мають бути public void. Тут розміщуються операції визволення ресурсів після тесту; у нашому випадку – очищення тестових даних (метод tearDownToHexStringData).
  • Анотація @AfterClassпов'язана за змістом з @BeforeClassале виконує методи після тестування класу. Як і у випадку з @BeforeClass, методи повинні бути public static void.
  • Анотація @Testпозначає тестові методи. Як і раніше, ці методи мають бути public void. Тут розміщуються самі перевірки. Крім того, в даній інструкції можна використовувати два параметри, expected - задає очікуваний виняток і timeout - задає час, після якого тест вважається таким, що провалився.

Приклади використання анотацій із параметрами, JUnit Test:

@Test(expected = NullPointerException.class) public void testToHexStringWrong() ( StringUtils.toHexString(null); ) @Test(timeout = 1000) public void infinity() ( while (true); )

Ігнорування виконання тесту, JUnit Ignore

Якщо один із тестів з якоїсь серйозної причини необхідно відключити, наприклад, тест постійно завершується з помилкою. Виправлення тесту можна відкласти до світлого майбутнього анотуванням @Ignore. Якщо помістити цю інструкцію на клас, то всі тести в цьому класі будуть відключені.

@Ignore @Test(timeout = 1000) public void infinity() ( while (true); )

Правила тастування, JUnit Rule

JUnitдозволяє використовувати певні розробником правила до та після виконання тесту, які розширюють функціонал. Наприклад, є вбудовані правила для завдання таймууту для тесту (Timeout), для завдання очікуваних винятків (ExpectedException), для роботи з тимчасовими файлами (TemporaryFolder) та ін.

Для оголошення правила необхідно створити publicне staticполе типу похідного від MethodRule та анотувати його за допомогою ключового слова Rule.

Public class JUnitOtherTest ( @Rule public final TemporaryFolder folder = New TemporaryFolder(); @Rule public final Timeout timeout = New Timeout(1000); @Rule public final ExpectedException thrown = ExpectedException.none(); @Ignore @ ) ( while (true); ) @Test public void testFileWriting() throws IOException ( final File log = folder.newFile("debug.log"); final FileWriter logWriter = new FileWriter(log); logWriter.append("Hello, "); logWriter.append("World!!!"); logWriter.flush(); logWriter.close(); ) @Test public void testExpectedException() throws IOException ( thrown.expect(NullPointerException.class); StringUtils.toHexString (null); ) )

Набір тестів, JUnit Suite, SuiteClasses

Запуск тесту може бути налаштований за допомогою анотації @RunWith. Тестові класи, які містять у собі тестові методи, можна поєднати у набори тестів (Suite). Наприклад, створено два класи тестування об'єктів: TestFilter, TestConnect. Ці два тестові класи можна об'єднати в один тестовий клас TestWidgets.java:

Package com.objects; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses (( TestFilter.class, TestConnect.class )) public class TestWidgets ()

Для налаштування тестів використовується анотація @SuiteClasses, в яку включені тестові класи.

Анотація Categories

Анотація Categoriesдозволяє об'єднати тести у категорії (групи). Для цього у тесті визначається категорія @Category, після чого налаштовуються категорії тестів, що запускаються в Suite. Це може виглядати так:

Public class JUnitStringUtilsCategoriesTest extends Assert ( //... @Category (Unit.class) @Test public void testIsEmpty() ( //... ) //... ) @RunWith (Categories.class) @Categories.IncludeCategory ( Unit.class) @Suite.SuiteClasses (( JUnitOtherTest.class, JUnitStringUtilsCategoriesTest.class )) public class JUnitTestSuite ()

Анотація, JUnit Parameterized

Анотація Parameterizedдозволяє використовувати параметризовані тести. Для цього в тест-класі оголошується статичний метод, який повертає список даних, які будуть використані як аргументи конструктора класу.

@RunWith (Parameterized.class) public class JUnitStringUtilsParameterizedTest extends Assert ( private final CharSequence testData; private final boolean expected; public JUnitStringUtilsParameterizedTest(final CharSequence testData, final boolean expected) ( this.testData = test public void testIsEmpty () ( final boolean actual = StringUtils.isEmpty (testData); assertEquals(expected, actual); ) @Parameterized.Parameters public static List isEmptyData() ( return Arrays.asList(new Object ( ( null, true ), ( "", true ), ( " ", false ), ( "some string", false ), )) ) )

Параметризація методу: Theories.class, DataPoints, DataPoint, Theory

Анотація Theoriesпараметризує тестовий метод, а чи не конструктор. Дані позначаються за допомогою @DataPointsі @DataPoint, тестовий метод - за допомогою @Theory. Тест, який використовує цей функціонал, може виглядати приблизно так:

@RunWith (Theories.class) public class JUnitStringUtilsTheoryTest extends Assert ( @DataPoints public static Object isEmptyData = новий Object ( ( "", true ), ( " ", false ), ( "some string", false ), ); @DataPoint public static Object nullData = new Object ( null, true ); @Theory public void testEmpty(final Object... testData)

Порядок виконання тестів

Якщо необхідно виконати тест у певному порядку, то можна скористатися анотацією @FixMethodOrder(MethodSorters.NAME_ASCENDING), визначеною JUnit 4.11. Наприклад:

@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class MyTest ( @Test public void test01()(...) @Test public void test02()(...) ... @Test public void test09()(...) )

В іншому випадку можна використовувати наступні 2 підходи.

Void test01(); void test02(); ... void test09(); @Test public void testOrder1() ( test1(); test3(); ) @Test(expected = Exception.class) public void testOrder2() ( test2(); test3(); test1(); ) @Test(expected = NullPointerException.class) public void testOrder3() ( test3(); test1(); test2(); )

@ Test public void testAllOrders() ( for (Object sample: permute(1, 2, 3)) ( for (Object index: sample) ( switch (((Integer) index).intValue()) ( case 1: test1( ); break; case 2: test2(); break; case 3: test3(); break; ) ) ) )

Список основних анотацій

АнотаціяОпис
@Test
public void testMethod()
метод є тестовим
@ Test (timeout = 100)
public void testMethod()
якщо час виконання перевищить параметр timeout, тест буде завершено невдало
@Test (expected = MyException.class)
public void testMethod()
метод повинен викинути виняток належать до класу MyException, інакше тест буде завершено невдало
@Ignore
public void testMethod()
ігнорувати тестовий метод
@BeforeClass
метод, що викликається один раз для класу перед виконанням тестових методів; тут можна розмістити ініціалізацію, яку потрібно виконувати тільки один раз, наприклад, прочитати дані, які будуть використовуватися в тестових методах або створити з'єднання з базою даних
@AfterClass
public static void testMethod()
метод, що викликається один раз для класу після виконання тестових методів; тут можна розмістити деініціалізацію, яку потрібно виконувати тільки один раз, наприклад, закрити з'єднання з базою даних або видалити дані, які більше не потрібні
@Before
public static void beforeMethod()
метод, який викликається перед кожним тестовим методом у тестовому класі; тут можна виконати необхідну ініціалізацію, наприклад, виставити початкові параметри
@After
public static void afterMethod()
метод, який викликається після кожного тестового методу у тестовому класі; тут можна виконати необхідну деініціалізацію, наприклад, видалити дані, які більше не потрібні

Список типів перевірок Asserts

Тип перевіркиОпис
fail()
fail(String message)
переривання тесту з помилкою, тобто. тест буде невдалим
assertTrue(boolean condition)
assertTrue(java.lang.String message, boolean condition)
перевірка на рівність умов condition значення true
assertFalse(boolean condition)
assertFalse(String message, boolean condition)
перевірка на рівність умови condition значенню false
assertEquals(<тип>expected,<тип>actual)
assertEquals(String message,<тип>expected,<тип>actual)
перевірка на рівність;<тип>- це Object, int, double і т.д.
assertArrayEquals(byte expecteds, byte actuals)
assertArrayEquals(String message,<тип>expecteds,<тип>actuals)
перевірка масивів на рівність; аналогічно assertEquals;<тип>- це Object, int, double і т.д.
assertNotNull(Object object)
assertNotNull(String message, Object object)
перевірка, що Object не null
assertNull(Object object)
assertNull(String message, Object object)
перевірка, що Object null
assertSame(Object expected, Object actual)
assertSame(String message, Object expected, Object actual)
перевірка рівності двох об'єктів expected і actual, тобто. один і той самий об'єкт

Приклад JUnit тестування

Для демонстрації основних можливостей JUnit використовуємо примітивний java клас FuncMath, який має два методи - знаходження факторіалу невід'ємного числа та суми двох чисел. Крім того, в екземплярі класу буде лічильник викликів методів.

Public class FuncMath ( int calls; public int getCalls() ( return calls; ) public long factorial(int number) ( calls++; if (number< 0) throw new IllegalArgumentException(); long result = 1; if (number >1) ( for (int i = 1; i< = number; i++) result = result * i; } return result; } public long plus(int num1, int num2) { calls++; return num1 + num2; } }

Іноді для виконання кожного тестового сценарію необхідний певний контекст, наприклад заздалегідь створені екземпляри класів. А після виконання необхідно звільнити зарезервовані ресурси. У цьому випадку використовують антотації @ Before і @ After. Метод, помічений @Before, буде виконуватися перед кожним тестовим випадком, а метод, помічений @After - після кожного тестового випадку. Якщо ж ініціалізацію та звільнення ресурсів потрібно зробити всього один раз – відповідно до та після всіх тестів – то використовують пару анотацій @BeforeClass та @AfterClass.

Тестовий клас з кількома сценаріями матиме такий вигляд:

Import org.junit.Test; import org.junit.After; import org.junit.Before; import org.junit.Assert; import org.junit.AfterClass; import org.junit.BeforeClass; public class JUnit_funcMath extends Assert ( private FuncMath math; @Before public void init() ( math = new FuncMath(); ) @After public void tearDown() ( math = null; ) @Test public void calls() ( assertEquals(" math.getCalls() != 0", 0, dao.getConnection()); math.factorial(1); assertEquals(1, math.getCalls()); math.factorial(1); assertEquals(2, math. getCalls()); ) @Test public void factorial() ( assertTrue(math.factorial(0) == 1); assertTrue(math.factorial(1) == 1); assertTrue(math.factorial(5) == 120);) @Test(expected = IllegalArgumentException.class) public void factorialNegative() ( math.factorial(-1); ) @Ignore @Test public void todo() ( assertTrue(math.plus(1, 1) == 3);

Метод calls тестує правильність лічильника дзвінків. Метод factorial перевіряє правильність обчислення факторіалу для деяких стандартних значень. Метод factorialNegative перевіряє, що для негативних значень факотріалу буде кинуто IllegalArgumentException. Метод todo буде проігноровано.

Наприкінці слід зазначити, що у статті представлені в повному обсязі можливості використання JUnit. Але як видно з наведених прикладів, фреймворк досить простий у використанні, додаткових можливостей небагато, але є можливість розширення за допомогою правил та запускалок.

Я вважаю, що розробка ПЗ - щось більше, ніж робота. Я бачу себе ремісником, який щодня намагається стати кращим. Найпростіший шлях для цього - знайти кілька хороших інструментівта відповісти на наступні питання:

  • Коли я повинен використовувати X інструмент?
  • Як я повинен використовувати X інструмент?

Автоматизоване тестування - дуже важлива частина розробки ПЗ, але в блогах програмістів трохи постів про інструменти, що використовуються. Ця ж стаття дозволить вам заглянути в мою «скриньку з інструментами». Я розповім про 12-ти бібліотеки та фреймворки, які я використовую для написання unit- та інтеграційних тестів, а також надам посилання на сторінки, які допоможуть вам зрозуміти, як їх використовувати.

Заглянемо в мою скриньку з інструментами

Перед тим, як ви зможете використовувати описані далі інструменти, ви повинні налаштувати складання, яке автоматично запускає інтеграційні та unit-тести. У мене є 2 нотатки на цю тему:

  • Інтеграційне тестування з Maven описує, як ми можемо налаштувати Maven-складання з інтеграційними та unit-тестами у різних директоріях.
  • Початок роботи з Gradle: інтеграційне тестування з плагіном TestSets описує те саме для Gradle.

Тепер ви готові подивитися на мої інструменти. Я розділив їх на категорії, щоб вам було легше орієнтуватися.

Отже, ось 12 інструментів, які я використовую при інтеграційному та unit-тестуванні.

Запуск тестів

AssertJ надає гнучкий API для написання тверджень з корисними повідомленнями про помилки, покращує читаність тестового коду, дозволяє перетворити тести на специфікації, що виконуються, які дотримуються потрібної предметно-орієнтованої мови.

Додатково:

  • Використання Hamcrest у тестуванні розповідає, як використовувати Hamcrest для написання тестів, а також як розширити його можливості за допомогою модулів користувача.
  • Перетворюємо твердження на предметно-орієнтовану мову розповідає, як створювати твердження користувача в AssertJ.
  • Пишемо чисті тести: заміна тверджень предметно-орієнтованою мовою. Розповідає, чому ми повинні замінити стандартні твердження JUnit на власні, які використовують вірну предметно-орієнтовану мову.

Тестування коду доступу до даних

Швидка БД корисна для написання інтеграційних тестів, які запускаються на локальній машині розробника.

Розширення для JUnit, яке може бути використане для ініціалізації БД у відомий стан перед виконанням кожного інтеграційного тесту та заповнення БД потрібними даними. DbUnit має свої недоліки, але це дуже корисний інструмент, що дозволяє розділити тестові дані та тестовий код.

Додатково:

  • описує ключові компоненти DbUnit, знання яких необхідне написання тестів з допомогою DbUnit.
  • надає п'ять правил написання найкращих тестівкод доступу до даних.

Java - об'єктно-орієнтована строготипізована мова програмування, розроблена компанією Sun Microsystems у 1991 році. Спочатку мова називалася Oak і призначалася для програмування побутової електроніки, проте пізніше була перейменована в Java. Офіційний випуск Java в 1995 році виявився дуже успішним і незабаром після цього мова Java зайняла сильні позиції як інструмент розробки серверних додатків.

В наш час Java використовують у всіх сферах розробки програмного забезпечення - серверні програми, десктопні програми, інструментальні засоби, веб-додатки - все це розробляється за допомогою Java і споріднених технологій.

Цільова аудиторія тесту з Java

Тест Java містить питання, відповіді на які знає більшість розробників з мінімальним досвідом програмування Java. Тест буде корисний багатьом, у тому числі людям, які не мають великого досвіду роботи з Java та хочуть отримати мінімальне уявлення про базових поняттяхцієї популярної мови програмування. Також цей тест може бути корисний студентам, які вивчають Java, для закріплення знань, отриманих у ВНЗ або ж в результаті самостійної роботи.

Попередні вимоги до тестування Java

Перед проходженням тесту з основ Java ви вже знаєте основні поняття, такі як "змінна", "цикл", "метод" і знаєте синтаксис основних мовних конструкцій. Якщо це не так, рекомендуємо вам ознайомитися з основами Java, шляхом прочитання вступного курсу.

Структура тесту з Java

Тест "Java - Основи" висвітлює такі теми:

Докладніше про тематики питань тесту можна прочитати нижче:

  • Об'єкти та класи: питання цієї тематики покривають такі поняття як клас, екземпляр класу (об'єкт), конструктори, методи та поля класу.
  • Синтаксис: питання цього розділу перевірять знання ключових слів мови, операторів, основних типів (примітиви, String), конструкцій, що управляють (if-else, while, for), а також розуміння обробки виняткових ситуацій (Exception).
  • Інше: цей розділ містить питання щодо основних понять, термінів та абревіатур, конвенцій іменування класів, змінних та методів. Також у цьому розділі розглядаються питання щодо файлів (.java, .class, .jar) та пакетів, життєвого циклу об'єктів, складання сміття (garbage collection).

Проходження онлайн тесту Java допомагає вам перевірити і закріпити знання основ Java, а також підводить вас до проходження складніших тестів з розділу тестів Java.

Сподіваємось, що даний тестбуде вам корисним і цікавим.

Подальший розвиток тесту з Java

Тест з Java постійно поповнюється новими питаннями.

У найближчих планах команди Quizful – створення тестів експертного рівня з Java. Можливо, ще буде створено тест Java Puzzlers, але він на жаль дуже повільно наповнюється питаннями.

Якщо у Вас є зауваження щодо питань тесту, обов'язково пишіть нам. Хай щастить.

У пошуках тестових завдань для java-програмістів натрапив на цікавий сайт ( користувачам Avastне ходити, визначається скриптовий троян, іншим мабуть можна) - http://www.betterprogrammer.com. Він перевіряє кваліфікацію ява-програмістів найпростішим, зате автоматичним способом: пропонуючи написати кілька функцій (методів) складності, що підвищується, і скопіювати код в TextArea. Далі движок сайту щось робить із завданнями (не інакше як юніт-тестит), обчислює за критеріями "швидкість-якість" певний індекс кваліфікації та видає кінцеву оцінку в такому вигляді:

Далі починаються питання. Сам я на Java програмував вдруге в житті (а тому складні завдання просто поскипав), так що 82% цього тесту відповідають рівню не-java програміст. Скільки ж тоді повинні набирати Java Junior, Java Programmer і особливо Java Senior?! Який результат очікувати від справжнього Java-програміста - 90, 95, 99? І нарешті, як бути, якщо "програміст" набирає менше 82, але тим не менш претендує на якусь роботу?!

Мобільні пристрої