Какие зависимости мне нужны для использования Mockito и JUnit в проекте Eclipse RCP Tycho

Это мой текущий тестовый фрагмент:

<packaging>eclipse-test-plugin</packaging>

<dependencies>
    <dependency>
        <groupId>org.junit</groupId>
        <artifactId>com.springsource.org.junit</artifactId>
        <version>4.7.0</version>
    </dependency>
</dependencies>

со следующей конфигурацией плагинов:

<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>tycho-surefire-plugin</artifactId>
    <version>${tycho.version}</version>
    <configuration>
        <dependencies>
            <dependency>
                <type>p2-installable-unit</type>
                <artifactId>org.eclipse.equinox.ds</artifactId>
            </dependency>
            <dependency>
                <type>p2-installable-unit</type>
                <artifactId>org.apache.felix.gogo.shell</artifactId>
            </dependency>
        </dependencies>
        <providerHint>junit47</providerHint>
        <argLine>-ea</argLine>
    </configuration>
</plugin>

и я использую подход POM-first для разрешения зависимостей:

<pomDependencies>consider</pomDependencies>

Приведенная выше версия JUnit — единственная, которую я смог найти, она упакована в виде пакета.

Проблема в том, что я не могу найти совпадение, которое позволяет мне использовать JUnit и Mockito вместе во фрагменте.

Мои общие проблемы:

  • Mockito-core от Maven Central нуждается в Hamcrest 1.0-2.0, но пакет JUnit экспортирует Hamcrest в версии 4.7.0.
  • В репозитории Springsource нет пакета junit-dep.
  • Когда я добавляю еще один пакет Hamcrest, у меня возникают конфликты версий между версиями, экспортируемыми JUnit (4.7.0), и пакетом Hamcrest (1.3).

Я хотел бы избежать создания собственного пакета из JUnit, Hamcrest и Mockito.


person oers    schedule 08.08.2013    source источник
comment
Tycho никогда не является POM-first, что означает, что POM является ведущим источником объявлений зависимостей. В Tycho зависимости всегда разрешаются из манифеста. С помощью pomDependencies=consider вы просто активируете механизм добавления пакетов из репозиториев Maven на целевую платформу. (Как правило, эти пакеты создаются с использованием подхода POM-first, то есть с помощью плагина maven-bundle-plugin.)   -  person oberlies    schedule 08.08.2013


Ответы (1)


Я обнаружил, что пакеты-оболочки JUnit, Hamcrest и Mockito из Eclipse Orbit хорошо работать вместе.

Для (на данный момент) последней версии Orbit, которая включает JUnit 4.11, Hamcrest 1.1 (с Hamcrest Core в версии 1.3) и Mockito 1.8.4, просто добавьте следующий фрагмент в свой POM:

<repositories>
    <repository>
        <id>orbit-kepler</id>
        <url>http://download.eclipse.org/tools/orbit/downloads/drops/R20130517111416/repository/</url>
        <layout>p2</layout>
    </repository>
</repositories>

В обертках Eclipse Orbit пакет org.junit экспортирует части пакета org.hamcrest.core. Однако Mockito требуется полное содержимое пакета org.hamcrest.core. Чтобы предотвратить случайное связывание между связкой Mockito и JUnit, экспорт помечен обязательным атрибутом. К сожалению, p2 не учитывает их (и Tycho использует p2 для разрешения зависимостей), поэтому вам нужно дать разрешение зависимостей вашего фрагмента (используя Mockito) дополнительную подсказку:

<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>target-platform-configuration</artifactId>
    <version>${tycho-version}</version>
    <configuration>
        <dependency-resolution>
            <extraRequirements>
                <requirement>
                    <type>eclipse-plugin</type>
                    <id>org.hamcrest</id>
                    <versionRange>0.0.0</versionRange>
                </requirement>
            </extraRequirements>
        </dependency-resolution>
    </configuration>
</plugin>

Это гарантирует, что пакет org.hamcrest используется во время разрешения зависимостей и что импорт Mokito может быть успешно подключен.

person oberlies    schedule 08.08.2013
comment
не могли бы вы уточнить, где и как я объявлю эти зависимости. Если я обычно объявляю их в своем master.pom, maven жалуется, что ему нужен groupId (который я не могу найти). И я мог бы добавить, что я использую определение цели, чтобы заставить тихо и затмение работать вместе. - person oers; 08.08.2013
comment
Давайте сначала попробуем заставить работать сборку Tycho: просто объявите в своем манифесте импорт пакетов/требования пакетов, и Tycho выберет пакеты из репозитория Orbit. (Как получить Mockito/Hamcrest/JUnit в целевой файл, это хороший отдельный вопрос.) - person oberlies; 08.08.2013
comment
это просто поразило меня :) Теперь я вижу, что Tycho загружает артефакты из недавно добавленного репозитория (в то время как eclipse все еще жалуется на отсутствующие вещи). И тест идет. - person oers; 08.08.2013
comment
Я добавил репозиторий орбиты в свой файл определения цели, и теперь eclipse подхватывает это (после перезапуска eclipse, переключения целевой платформы обратно и принудительно и т. д.;) - person oers; 09.08.2013
comment
@oberlies Хотел бы я дать вам больше голосов! Знаете ли вы, есть ли аналогичный сайт обновлений для утверждений Fluet org.assertJ? Еще раз спасибо! - person Sheldon Warkentin; 29.10.2013
comment
@SheldonWarkentin: нет. Но вы охватите более широкую аудиторию, если зададите это как новый вопрос. Последующие вопросы не рекомендуются в stackoverflow, но только потому, что они не работают должным образом. - person oberlies; 29.10.2013
comment
Ваше «разрешение зависимостей» спасло меня! Спасибо! - person Jose Ramon Garcia; 22.05.2017