Сам JUnit недостаточно для большинства современных Java-проектов. Вам также нужна библиотека для насмешек, может, что-то еще В этом мини-руководстве я представляю тестовые зависимости, с которыми вы можете начать в новом проекте Java.
Все начинается с JUnit
В репозитории Maven есть два артефакта в группе junit
: junit
и junit-dep
. До версии 4.9
последняя не содержала зависимости от встроенного Hamcrest. Сегодня мы используем зависимости junit
следующим образом:
1
2
3
4
5
6
|
< dependency > < groupId >junit</ groupId > < artifactId >junit</ artifactId > < version >4.11</ version > < scope >test</ scope > </ dependency > |
dependency:tree
производит:
1
2
|
[INFO] \- junit:junit:jar:4.11: test [INFO] \- org.hamcrest:hamcrest-core:jar:1.3: test |
Mockito
Следующая зависимость, которая нам обычно нужна, — это насмешливая структура. Нет сомнений, что Mockito является одним из самых популярных. Он поставляется в двух mockito-all
: mockito-all
и mockito-core
. Первая — это одна банка, в которой все зависимости встроены, а вторая — просто Mockito. Рекомендуется использовать mockito-core
с версией 4.11
JUnit. Итак, давайте добавим зависимость:
1
2
3
4
5
6
|
< dependency > < groupId >org.mockito</ groupId > < artifactId >mockito-core</ artifactId > < version >1.9.5</ version > < scope >test</ scope > </ dependency > |
Теперь dependency:tree
выдает:
1
2
3
4
|
[INFO] +- junit:junit:jar:4.11: test [INFO] | \- org.hamcrest:hamcrest-core:jar:1.3: test [INFO] \- org.mockito:mockito-core:jar:1.9.5: test [INFO] \- org.objenesis:objenesis:jar:1.0: test |
Hamcrest
Зная, что mockito-core
лучше для декларативного управления зависимостями, мы переопределим зависимости для Hamcrest и Objenesis следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
< dependency > < groupId >org.hamcrest</ groupId > < artifactId >hamcrest-core</ artifactId > < version >1.3</ version > < scope >test</ scope > </ dependency > < dependency > < groupId >org.objenesis</ groupId > < artifactId >objenesis</ artifactId > < version >1.3</ version > < scope >test</ scope > </ dependency > |
Имея это, мы можем легко добавить библиотеку Hamcrest, которая предоставляет библиотеку объектов соответствия, зависимость:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
< dependency > < groupId >org.hamcrest</ groupId > < artifactId >hamcrest-core</ artifactId > < version >1.3</ version > < scope >test</ scope > </ dependency > < dependency > < groupId >org.objenesis</ groupId > < artifactId >objenesis</ artifactId > < version >1.3</ version > < scope >test</ scope > </ dependency > |
И dependency:tree
выдает:
1
2
3
4
5
|
[INFO] +- junit:junit:jar:4.11: test [INFO] +- org.mockito:mockito-core:jar:1.9.5: test [INFO] +- org.hamcrest:hamcrest-core:jar:1.3: test [INFO] +- org.hamcrest:hamcrest-library:jar:1.3: test [INFO] \- org.objenesis:objenesis:jar:1.3: test |
AssertJ
AssertJ — беглые утверждения для Java — предоставляет богатый и интуитивно понятный набор строго типизированных утверждений, которые можно использовать для модульного тестирования. AssertJ — это форк FEST Assert, о котором я писал некоторое время назад в этом посте . А как насчет зависимости? Давайте посмотрим:
1
2
3
4
5
6
|
< dependency > < groupId >org.assertj</ groupId > < artifactId >assertj-core</ artifactId > < version >1.5.0</ version > < scope >test</ scope > </ dependency > |
Который результат в следующем дереве:
1
2
3
4
5
6
|
[INFO] +- junit:junit:jar:4.11: test [INFO] +- org.mockito:mockito-core:jar:1.9.5: test [INFO] +- org.assertj:assertj-core:jar:1.5.0: test [INFO] +- org.hamcrest:hamcrest-core:jar:1.3: test [INFO] +- org.hamcrest:hamcrest-library:jar:1.3: test [INFO] \- org.objenesis:objenesis:jar:1.3: test |
Окончательный вариант
Полная структура Maven выглядит следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<!-- Test --> < dependency > < groupId >junit</ groupId > < artifactId >junit</ artifactId > < version >4.11</ version > < scope >test</ scope > </ dependency > < dependency > < groupId >org.mockito</ groupId > < artifactId >mockito-core</ artifactId > < version >1.9.5</ version > < scope >test</ scope > </ dependency > < dependency > < groupId >org.assertj</ groupId > < artifactId >assertj-core</ artifactId > < version >1.5.0</ version > < scope >test</ scope > </ dependency > < dependency > < groupId >org.hamcrest</ groupId > < artifactId >hamcrest-core</ artifactId > < version >1.3</ version > < scope >test</ scope > </ dependency > < dependency > < groupId >org.hamcrest</ groupId > < artifactId >hamcrest-library</ artifactId > < version >1.3</ version > < scope >test</ scope > </ dependency > < dependency > < groupId >org.objenesis</ groupId > < artifactId >objenesis</ artifactId > < version >1.3</ version > < scope >test</ scope > </ dependency > |
- Вы можете найти это в демонстрационном проекте unit-testing на GitHub (ссылка на pom.xml ) или вы можете попробовать мой spring-mvc-quickstart-archetype (ссылка на pom.xml ).