Как начать и остановить мула в Maven - PullRequest
2 голосов
/ 05 декабря 2011

Мне нужно запустить Mule перед запуском тестов и остановить его, когда тесты будут завершены.Мне неясно, как изменить мой Maven pom для достижения этой цели.Пока у меня есть следующее:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>java</executable>
                <arguments>
                    <argument>-classpath</argument>
                    <classpath/>
                    <argument>org.mule.MuleServer</argument>
                    <argument>-config</argument>
                    <argument>my-config.xml</argument>
                </arguments>
            </configuration>
        </plugin>

--- Обновление ---

После некоторых ответов ниже я решил добавить некоторые дополнительные детали.

У меня есть несколько модульных тестов, расширяющих класс Mules FunctionalTestCase:

public class SomeUnitTest extends FunctionalTestCase

Я начал писать несколько новых приемочных тестов для клиентов с использованием JBehave, которые предназначены для запуска во время фазы тестирования интеграции mavens.Эти тесты не могут быть успешными без запуска мула.Основной класс, который загружает и выполняет истории, уже расширяет класс JUnitStories:

public class MyStories extends JUnitStories 

Так как я не могу наследовать от FunctionalTestCase в этом классе, мне нужно искать альтернативы, чтобы заставить mule работать и останавливаться, когда мне нужноэто для этих историй.

Ответы [ 3 ]

4 голосов
/ 05 декабря 2011

Почему бы вам не использовать Mule's FunctionalTestCase вместо этого? Он запускает Мул в памяти и загружает ваши конфиги. Не уверен, что вы получаете от запуска всего автономного Mule.

0 голосов
/ 28 мая 2013

Попробуйте использовать junit @ClassRule. Побочным эффектом является то, что отдельные тесты больше не могут быть выполнены.

    @RunWith(Suite.class)
@Suite.SuiteClasses({MuleFlowTest.class})
    public class MuleSuite {


    @ClassRule
    public static ExternalResource testRule = new ExternalResource() {

        @Override
        protected void before() throws Throwable {

            final String CLI_OPTIONS[] = {"-config", FlowTestUtil.getURI() };

            MuleServer server = new MuleServer(CLI_OPTIONS);
            server.start(false, true);
            mc = server.getMuleContext();
            muleServer = server;

        };

        @Override
        protected void after() {
            System.out.println("Shutdown");
            muleServer.shutdown();
            muleServer = null;
        }
    };

    private static MuleServer muleServer;
    public static MuleContext mc;

}

public class MuleFlowTest {

    @Test
    public void flowTest() {
        assertNotNull(MuleSuite.mc);
    }
}
0 голосов
/ 05 декабря 2011

Вы, вероятно, могли бы достичь того, что вы хотите, используя фазы maven. Вы должны определить 2 исполнения. Один, чтобы начать мул, и один, чтобы остановить его. Вы запускаете mule на одном из этапов предварительного тестирования (может быть, что-то вроде Process-Test-Class) и затем устанавливаете mule после этапа тестирования. Хотя это может быть довольно сложно.

Другая возможность - запустить mule в junit, где-то, как в функции установки BeforeClass. Это, вероятно, будет намного проще. Увидеть: http://junit.sourceforge.net/javadoc/org/junit/BeforeClass.html

class muleDriver {
    @BeforeClass
    public static startMule() {
        ....programmatically initialize Mule....
        ....You should be able to grab the config files from the classpath....
    }

    @Test
    public void testSomething() {
        ....Run Some Tests...
    }
}

Другой вопрос, который я хотел бы задать, - почему вы захотите запустить весь мул фреймворк для тестов. Я был в команде, которая сделала это, и тесты заняли огромное количество времени во время сборок, потому что они запускали мул много раз в течение цикла тестирования (и другие команды копировали шаблон).

...