我需要在运行测试之前启动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来运行的替代方案,并在我需要这些故事时停止。
答案 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);
}
}