Як запустити тести в Java




Як запустити тести в Java



Як написати тест на java

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

  • Підключіть залежність JUnit до свого проекту. Якщо ви використовуєте Maven, додайте наступний код до pom.xml:
junit
junit
4.13.2
test
  • Створіть клас для тестування. Наприклад, якщо ви хочете протестувати клас Calculator, створіть клас CalculatorTest:
import org.junit.Test;
import
static
org.junit.Assert.*;
public
class
CalculatorTest

@Test
public
void
testAddition()

Calculator
calculator
=
new
Calculator();
int
result
=
calculator.add(2,
3);
assertEquals(5,
result);
>
@Test
public
void
testSubtraction()

Calculator
calculator
=
new
Calculator();
int
result
=
calculator.subtract(5,
3);
assertEquals(2,
result);
>
>
  • Створіть методи тестування. Кожен метод має бути анотований анотацією @Test. Всередині методу викликайте методи, які ви хочете протестувати, та порівнюйте очікуваний результат із фактичним. У цьому прикладі ми тестуємо методи add та subtract класу Calculator
  • Запустіть випробування. У більшості середовищ розробки можна запустити тести, натиснувши кнопку "запустити тести". Ви також можете запустити тести з командного рядка за допомогою команди mvn test (якщо ви використовуєте Maven) або java-cp org.junit.runner.JUnitCore

Для написання тестів на Java з використанням фреймворку JUnit і автоматичного складання за допомогою Gradle необхідно виконати кілька кроків:

  • Створити проект Gradle в IDE (наприклад, IntelliJ IDEA ).
  • Додати залежність JUnit у файл build.gradle :
import org.junit.Test;
import
static
org.junit.Assert.*;
public
class
MyTest

@Test
public
void
testSum()

assertEquals(4,
2
+
2);
>
@Test
public
void
testMax()

int[]
numbers
=
1,
2,
3,
4,
5>;
int
max
=
numbers[0];
for
(int
i
=
1;
i

numbers.length;
i++)

if
(numbers[i]
>
max)

max
=
numbers[i];
>
>
assertEquals(5,
max);
>
>

Після виконання цих кроків, Gradle автоматично збере і запустить усі тести, які знаходяться в пакеті src/test/java .

Програмний запуск тестів JUnit із програми Java

У цьому посібнику ми покажемо, як запускати тести JUnit безпосередньо з коду Java є сценарії, в яких ця опція стане в нагоді.

Якщо ви новачок у JUnit або хочете перейти на JUnit 5, ви можете ознайомитися з деякими з численних посібників з цієї теми, які ми маємо.

2. Залежність Maven

Нам знадобиться кілька основних залежностей для запуску тестів JUnit 4 і JUnit 5:


dependencies>


dependency>


groupId>org.junit.jupitergroupId>


artifactId>junit-jupiter-engineartifactId>


version>5.8.1version>


scope>testscope>


dependency>


dependency>


groupId>org.junit.platformgroupId>


artifactId>junit-platform-launcherartifactId>


version>1.2.0version>


dependency>


dependencies>


// for JUnit 4

dependency>


groupId>junitgroupId>


artifactId>junitartifactId>


version>4.12version>


scope>testscope>


dependency>

Останні версії JUnit 4, JUnit 5 та JUnit Platform Launcher можна знайти на Maven Central.

3. Запуск тестів JUnit 4

3.1.

Як для JUnit 4, так і для JUnit 5 ми створимо кілька тестових класів-заповнювачів, яких буде достатньо для демонстрації прикладів:


public
class
FirstUnitTest




@Test


public
void
whenThis_thenThat()



assertTrue(true);


>



@Test


public
void
whenSomething_thenSomething()



assertTrue(true);


>



@Test


public
void
whenSomethingElse_thenSomethingElse()



assertTrue(true);


>


>

public
class
SecondUnitTest




@Test


public
void
whenSomething_thenSomething()



assertTrue(true);


>



@Test


public
void
whensomethingElse_thenSomethingElse()



assertTrue(true);


>


>

За допомогою JUnit 4 ми створюємо тестові класи, додаючи анотацію @Test до кожного тестового методу.

Ми також можемо додати інші корисні інструкції, такі як @Before або @After , але це не входить до завдань цього посібника.

3.2. Запуск одного тестового класу

Щоб запустити тести JUnit з коду Java, ми можемо використовувати клас JUnitCore (з додаванням класу TextListener, який використовується для відображення виводу в System.out):


JUnitCore
junit
=
new
JUnitCore();

junit.addListener(new
TextListener(System.out));

junit.run(FirstUnitTest.class);

У консолі ми побачимо дуже просте повідомлення про успішні тести:


Running one
test
class:

..

Time:
0.019

OK
(2
tests)

3.3. Запуск кількох тестових класів

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


JUnitCore
junit
=
new
JUnitCore();

junit.addListener(new
TextListener(System.out));



Result
result
=
junit.run(


FirstUnitTest.class,


SecondUnitTest.class);



resultReport(result);

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


public
static
void
resultReport(Result
result)



System.out.println("Finished. Result: Failures: "
+


result.getFailureCount()
+
". Ignored: "
+


result.getIgnoreCount()
+
". Tests run: "
+


result.getRunCount()
+
". Time: "
+


result.getRunTime()
+
"ms.");


>

3.4. Запуск набору тестів

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


@RunWith(Suite.class)


@Suite.SuiteClasses(


FirstUnitTest.class,


SecondUnitTest.class


>)


public
class
MyTestSuite



>

Щоб запустити ці тести, ми знову використовуватимемо той же код, що й раніше:


JUnitCore
junit
=
new
JUnitCore();

junit.addListener(new
TextListener(System.out));


Result
result
=
junit.run(MyTestSuite.class);


resultReport(result);

3.5. Виконання повторних тестів

Однією з цікавих особливостей JUnit є те, що ми можемо повторювати тести, створюючи екземпляри RepeatedTest . Це може бути дуже корисним, коли ми тестуємо випадкові значення або перевіряємо продуктивність.

У наступному прикладі ми запустимо тести з MergeListsTest п'ять разів:


Test
test
=
new
JUnit4TestAdapter(FirstUnitTest.class);


RepeatedTest
repeatedTest
=
new
RepeatedTest(test,
5);



JUnitCore
junit
=
new
JUnitCore();

junit.addListener(new
TextListener(System.out));


junit.run(repeatedTest);

Тут ми використовуємо JUnit4TestAdapter як оболонку для нашого тестового класу.

Ми навіть можемо створювати набори програмно, застосовуючи повторне тестування:


TestSuite
mySuite
=
new
ActiveTestSuite();



JUnitCore
junit
=
new
JUnitCore();

junit.addListener(new
TextListener(System.out));


mySuite.addTest(new
RepeatedTest(new
JUnit4TestAdapter(FirstUnitTest.class),
5));

mySuite.addTest(new
RepeatedTest(new
JUnit4TestAdapter(SecondUnitTest.class),
3));


junit.run(mySuite);

4. Запуск тестів JUnit 5

4.1. Сценарій тестування

У JUnit 5 ми будемо використовувати ті ж тестові класи, що й у попередній демонстрації — FirstUnitTest і SecondUnitTest, з деякими незначними відмінностями через іншу версію JUnit framework, наприклад, пакет для @Test та методи затвердження.

4.2. Запуск одного тестового класу

Щоб запустити тести JUnit 5 з Java, ми налаштуємо екземпляр LauncherDiscoveryRequest . Він використовує клас будівельника, у якому ми повинні встановити селектори пакетів та фільтри імен тестових класів, щоб отримати всі тестові класи, які ми хочемо запустити.

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

Обидва вони запропонують інформацію про тести, які будуть виконані, та про результати:


public
class
RunJUnit5TestsFromJava



SummaryGeneratingListener
listener
=
new
SummaryGeneratingListener();



public
void
runOne()



LauncherDiscoveryRequest
request
=
LauncherDiscoveryRequestBuilder.request()


.selectors(selectClass(FirstUnitTest.class))


.build();


Launcher
launcher
=
LauncherFactory.create();


TestPlan
testPlan
=
launcher.discover(request);


launcher.registerTestExecutionListeners(listener);


launcher.execute(request);


>


// main method.


>

4.3. Запуск кількох тестових класів

Ми можемо встановити селектори та фільтри для запиту на запуск кількох тестових класів.

Давайте подивимося, як ми можемо встановити селектори пакетів та фільтри імен тестових класів, щоб отримати всі тестові класи, які ми хочемо запустити:


public
void
runAll()



LauncherDiscoveryRequest
request
=
LauncherDiscoveryRequestBuilder.request()


.selectors(selectPackage("com.foreach.junit5.runfromjava"))


.filters(includeClassNamePatterns(".*Test"))


.build();


Launcher
launcher
=
LauncherFactory.create();


TestPlan
testPlan
=
launcher.discover(request);


launcher.registerTestExecutionListeners(listener);


launcher.execute(request);


>

4.4. Тестовий висновок

У методі main() ми викликаємо наш клас, а також використовуємо прослуховувач для отримання інформації про результат. На цей раз результат зберігається як TestExecutionSummary.

Найпростіший спосіб отримати його інформацію — просто надрукувати в потік виведення консолі:


public
static
void
main(String[]
args)



RunJUnit5TestsFromJava
runner
=
new
RunJUnit5TestsFromJava();


runner.runAll();



TestExecutionSummary
summary
=
runner.listener.getSummary();


summary.printTo(new
PrintWriter(System.out));


>

Це дасть нам деталі нашого тестового прогону:


Test run finished after
177
ms

[
7
containers found
]


[
0
containers skipped
]


[
7
containers started
]


[
0
containers aborted
]


[
7
containers successful
]


[
0
containers failed
]


[
10
tests found
]


[
0
tests skipped
]


[
10
tests started
]


[
0
tests aborted
]


[
10
tests successful
]


[
0
tests failed
]

5. Висновок

У цій статті ми показали, як програмно запускати тести JUnit із коду Java, охоплюючи JUnit 4, а також недавню версію JUnit 5 цього середовища тестування.

Як завжди, реалізація показаних прикладів доступна на GitHub як для прикладів JUnit 5 , так і для JUnit 4 .

Схожі статті

  • Як запустити телефон моторола
  • Як запустити СПДС
  • Як запустити навичку Вгадай мелодію
  • Яке поєднання клавіш запустити презентацію з поточного слайду
  • Як примусово запустити ноутбук ASUS
  • Як перезапустити сигналізацію Magicar
  • Як запустити бот у телеграмі
  • Як запустити Убунту без встановлення
  • Недавні статті

  • Як бродить зернова брага
  • Що робити якщо не засмагаєш на сонці чому засмага погано лягає на шкіру або перестає прилипати
  • Як швидко зняти гель лак без апарату
  • Як робиться Каті голови
  • Яка гребінець краще для об'єму
  • Чим роблять м'яку покрівлю
  • Чи можна залишати крем для обличчя на ніч
  • Де знаходиться датчик селектора
  • географія нашої діяльності
    вулиця Драгоманова, 27
    вул. Курчатова 1Б
    вул. Міцкевича 130
    вул. Лабунського, 1
    вул. Макарова-Пржевальського
    вул. Толстого 10
    вул. Грушевського 28
    вул. Перший промінь (Черняхівського)
    напишіть нам

    сообщение успешно отправлено
    x