Mule - 使用Mule属性作为文件路径测试具有入站/出站端点的流

时间:2014-05-13 10:06:17

标签: java testing properties mule filepath

我正在尝试为Mule流编写测试,该测试涉及将文件放在某个位置,等待我的流处理它并比较输出以查看它是否已正确转换。我的流程如下:

<flow name="mainFlow" processingStrategy="synchronous">
    <file:inbound-endpoint name="fileIn" path="${inboundPath}">
        <file:filename-regex-filter pattern="myFile.csv" caseSensitive="true"/> 
    </file:inbound-endpoint>

    ...

    <file:outbound-endpoint path="${outboundPath}" outputPattern="out.csv"/>
</flow>

有没有办法可以访问我的测试类中的inboundPathoutboundPath Mule属性,以便我可以删除文件并在正确的位置等待输出?

我正在使用的测试类是:

public class MappingTest extends BaseFileToFileFunctionalTest {

    @Override
    protected String getConfigResources() {
        return "mappingtest.xml";
    }

    @Test
    public void testMapping() throws Exception {
        dropInputFileIntoPlace("myFile.csv");
        waitForOutputFile("out.csv", 100);

        assertEquals(getExpectedOutputFile("expected-out.csv"), getActualOutputFile("out.csv"));
    }

}

扩展了这个课程:

public abstract class BaseFileToFileFunctionalTest extends FunctionalTestCase {
    private static final File INPUT_DIR = new File("/tmp/muletest/input");
    private static final File OUTPUT_DIR = new File("/tmp/muletest/output");
    private static final Charset CHARSET = Charsets.UTF_8;

    @Before
    public void setup() {
        new File("/tmp/muletest/input").mkdirs();
        new File("/tmp/muletest/output").mkdirs();

        empty(INPUT_DIR);
        empty(OUTPUT_DIR);

    }

    private void empty(File inputDir) {
        for (File file : inputDir.listFiles()) {
            file.delete();
        }
    }

    protected File waitForOutputFile(String expectedFileName, int retryAttempts) throws InterruptedException {
        boolean polling = true;
        int attemptsRemaining = retryAttempts;
        File outputFile = new File(OUTPUT_DIR, expectedFileName);

        while (polling) {
            Thread.sleep(100L);
            if (outputFile.exists()) {
                polling = false;
            }
            if (attemptsRemaining == 0) {
                VisibleAssertions.fail("Output file did not appear within expected time");
            }
            attemptsRemaining--;
        }
        outputFile.deleteOnExit();

        return outputFile;
    }

    protected void dropInputFileIntoPlace(String inputFileResourceName) throws IOException {
        File inputFile = new File(INPUT_DIR, inputFileResourceName);
        Files.copy(Resources.newInputStreamSupplier(Resources.getResource(inputFileResourceName)), inputFile);
        inputFile.deleteOnExit();
    }

    protected String getActualOutputFile(String outputFileName) throws IOException {
        File outputFile = new File(OUTPUT_DIR, outputFileName);
        return Files.toString(outputFile, CHARSET);
    }

    protected String getExpectedOutputFile(String resourceName) throws IOException {
        return Resources.toString(Resources.getResource(resourceName), CHARSET);
    }
}

正如您所看到的,我正在创建临时输入/输出目录。如果可能的话,我想从Mule属性中读取这部分内容吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

在观察您的测试类和代码之后,我可以看到您想要动态创建临时文件夹,在其中放置文件。并且流应该从Temp Directory读取文件并将输出写入另一个Temp目录。需要注意的是,加载配置时会创建Mule的端点。因此,$ {inbound}和$ {outbound}应该在提供时提供给mule流。

  1. 因此,一个选项可以是创建指向临时文件夹进行测试的虚拟流。 或
  2. 创建一个指向临时文件夹的测试属性文件,并将其加载到您的流配置中,以便您的流端点获取临时文件夹路径。
  3. 在创建它们之后,无论如何都不能将路径提供给流入站端点(在配置加载时)。

    <强> UPDATE1: 根据您的评论,带有选项的解决方案如下所示。

    1. 将配置的一部分加载到另一个配置中。 喜欢&#34; mapping-core-config.xml,mappingtest.xml&#34;其中mapping-core-config将具有加载属性文件的标记。

    2. 现在为mapping-core-config.xml文件创建一个测试配置文件,该文件加载测试属性文件。这应该在您的测试配置中使用。这样,在不修改或干扰主代码的情况下,您可以测试指向临时文件夹的流。

      &#34;映射核 - 测试 - config.xml中,mappingtest.xml&#34;

    3. 注意:测试配置可以驻留在src / test / resources文件夹中。

      希望这有帮助。