如何在maven中启动和停止mule

时间:2011-12-05 18:52:48

标签: testing maven mule

我需要在运行测试之前启动Mule,并在测试完成后停止它。我不清楚如何改变我的Maven pom来实现这一目标。到目前为止,我的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编写一些新的客户验收测试,这些测试在专家“集成测试”阶段运行。如果没有mule运行实例,这些测试就无法成功。加载和执行故事的主类已经扩展了JUnitStories类:

public class MyStories extends JUnitStories 

由于我无法继承此类中的FunctionalTestCase,因此我需要考虑使用mule来运行的替代方案,并在我需要这些故事时停止。

3 个答案:

答案 0 :(得分:4)

为什么不使用Mule的FunctionalTestCase呢?它会激活一个内存中的骡子并加载你的配置。不知道从启动整个独立骡子中获得了什么。

答案 1 :(得分:0)

你可以通过利用maven的阶段来完成你想要的任务。你必须定义2次执行。一个开始骡子,一个停止它。你可以在其中一个预测试阶段(可能是过程测试类)开始骡子,然后在测试阶段后开始测量mule。不过,这可能相当棘手。

另一种可能性是在junit中发射mule,就像在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...
    }
}

我要问的另一个问题是你为什么要启动整个mule框架进行测试。我在一个团队中做了这个,测试结果在构建过程中耗费了大量的时间,因为他们在整个测试周期中多次开始骡子(其他团队复制了模式。)

答案 2 :(得分:0)

尝试使用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);
    }
}