Статьи

Как: проверить зависимости в проекте Maven (JUnit, Mockito, Hamcrest, AssertJ)

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