Сам 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 ).