【问题标题】:How to start and stop mule in maven如何在maven中启动和停止mule
【发布时间】:2012-01-13 11:44:00
【问题描述】:

我需要在运行测试之前启动 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 编写一些新的客户验收测试,这些测试在 maven 的“集成测试”阶段运行。如果没有运行 mule 的实例,这些测试将无法成功。加载和执行故事的主类已经扩展了 JUnitStories 类:

public class MyStories extends JUnitStories 

由于我无法从此类中的 FunctionalTestCase 继承,我需要寻找替代方案,以在我需要这些故事时让 mule 运行和停止。

【问题讨论】:

    标签: testing maven mule


    【解决方案1】:

    您可能可以通过利用 maven 的阶段来完成您想要的。您必须定义 2 次执行。一个启动骡子,一个停止骡子。您将在预测试阶段之一启动 mule(可能类似于 process-test-classes),然后在测试阶段之后 stat 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 框架进行测试。我所在的团队就是这样做的,而测试最终在构建过程中花费了大量时间,因为他们在整个测试周期中多次启动 mule(并且其他团队复制了这种模式。)

    【讨论】:

    • 感谢奥斯汀的回复。我不想“多次启动 mule。我试图避免这种情况。我想启动它,在单元测试和验收测试运行时让它运行,然后关闭它。
    • 旧线程-但这不是使用FunctionalTestCase的全部目的吗?不确定每个测试是否真的为每个测试启动 Mule 服务器。如果是这样的话,那可能有点乏味。专家请评论?
    【解决方案2】:

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

    【讨论】:

    • 我现在正在使用它,但我有顾虑。首先,它将我与 JUnit 的预版本联系在一起(我认为是 v3,当前版本是 v4)。其次,我无法确认 mule 是否为我使用 FunctionalTestCase 扩展的每个测试类启动和停止,或者它是否在测试运行时保留在内存中。如果它随着每个测试用例启动和停止,那么它可能比在测试开始时运行 mule 效率低。
    • 首先,它不会将您绑定到 JUnit v3。 Mule 3.2.0 默认引入了 JUnit v4.8.1,但我相信如果需要,您可以使用更新的 4.x JAR。其次,您可以控制是否要在每个测试中处理 Mule 或让它在所有测试用例中运行。
    • 你如何控制它以便它继续为所有测试运行?
    • 在你的测试用例构造函数中,添加:setDisposeContextPerClass(true);
    • 此外,Mule 为测试公开的内容与 JUnit 之间存在一些差异。请注意我之前发布的一个问题:stackoverflow.com/questions/8276197/….
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-23
      • 2013-01-09
      • 2017-12-24
      • 1970-01-01
      • 2012-10-09
      • 2010-12-13
      • 1970-01-01
      • 2016-05-25
      相关资源
      最近更新 更多