我正在尝试为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>
有没有办法可以访问我的测试类中的inboundPath
和outboundPath
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属性中读取这部分内容吗?提前谢谢。
答案 0 :(得分:1)
在观察您的测试类和代码之后,我可以看到您想要动态创建临时文件夹,在其中放置文件。并且流应该从Temp Directory读取文件并将输出写入另一个Temp目录。需要注意的是,加载配置时会创建Mule的端点。因此,$ {inbound}和$ {outbound}应该在提供时提供给mule流。
在创建它们之后,无论如何都不能将路径提供给流入站端点(在配置加载时)。
<强> UPDATE1:强> 根据您的评论,带有选项的解决方案如下所示。
将配置的一部分加载到另一个配置中。 喜欢&#34; mapping-core-config.xml,mappingtest.xml&#34;其中mapping-core-config将具有加载属性文件的标记。
现在为mapping-core-config.xml文件创建一个测试配置文件,该文件加载测试属性文件。这应该在您的测试配置中使用。这样,在不修改或干扰主代码的情况下,您可以测试指向临时文件夹的流。
&#34;映射核 - 测试 - config.xml中,mappingtest.xml&#34;
注意:测试配置可以驻留在src / test / resources文件夹中。
希望这有帮助。