Maven: Как протестировать два модуля с одинаковыми тестами в третьем модуле - PullRequest
4 голосов
/ 25 февраля 2010

Представьте себе проект maven с 3 модулями, интерфейсным модулем и двумя различными реализациями этого интерфейса в каждом модуле. Я мог бы протестировать каждую реализацию в своем собственном модуле, но тестовые случаи в основном одинаковы из-за того же интерфейса.

Есть ли способ собрать контрольные примеры в четвертом модуле maven и протестировать две реализации с этим модулем?

parent
|-interface
|-impl a
|-impl b
|-tests

Чтобы при сборке impl a maven знал, что нужно запускать тесты из модуля tests для сборки impl.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 25 февраля 2010

Относительно Java:

А как насчет создания abstract теста в модуле тестов, где вы будете писать основные тестовые случаи. В этом тесте будет использоваться интерфейс, определенный в первом модуле теста.

Затем в каждом модуле impl a и impl b вы создаете тест, который расширяет тест abstract и вызывает методы теста, определенные в модуле tests.

Относительно Maven:

В модуле tests вы должны будете указать Maven, что он должен создать jar из пакета тестов:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>test-jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

Затем в каждом реализующем модуле вам нужно будет указать, что у вас есть зависимость от этой test-jar библиотеки:

    <dependency>
        <groupId>foo</groupId>
        <artifactId>bar</artifactId>
        <version>${pom.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
    </dependency>
2 голосов
/ 25 февраля 2010

Да, мы сделали это для похожего сценария. Вы просто создаете два компонента в своем тестовом модуле, по одному для каждой реализации. Предполагая, что у вас есть maven pom для сборки всего в родительском модуле, теперь он будет включать такие модули, как

<module>../interface</module>
<module>../impl_a</module>
<module>../impl_b</module>
<module>../tests/impl_a</module>
<module>../tests/impl_b</module>

Где каждый тестовый pom включает зависимость для соответствующей реализации. Все зависимости, конечно же, предназначены для тестирования.

Теперь, запустив mvn для parent / pom.xml, вы соберете все ваши проекты и дважды выполните одни и те же тесты с соответствующими зависимостями. Затем проект тестов создаст целевой каталог под каждым impl_? подкаталог.

1 голос
/ 25 февраля 2010

Я не делал этого с модулями maven, но это должно быть просто , если вы реализуете абстрактный контрольный пример ala

public abstract class XyTester {

  protected abstract YourInterface createImpl();
}

Необходимо, чтобы junit позволил абстрактному классу не заканчиваться на «Test», поэтому я выбираю Tester.

Смотрите здесь для абстрактного класса в реальном мире и здесь или здесь для одной из его реализаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...