2

我正在尝试通过将有效负载设置为我保存在文件中的 JSON 对象来创建一个模拟 HTTP 请求的 MUnit 测试。在 Mule 3 中,我会这样做getResource('fileName.json').asString(),而且效果很好。但是在 Mule 4 中,我不能静态调用 getResource。

在 Mulesoft 论坛上发现了一个论坛帖子,建议我使用MunitTools::getResourceAsString. 当我运行我的测试时,我确实看到了 JSON 对象,但包含所有的\n\r字符以及\转义的所有引号。显然这意味着我的 JSON 格式不再正确。

理想情况下,我想找到 MunitTools 的参考,以便我可以看到我可以调用的函数列表,并且可能找到一个不添加转义字符的函数,但我没有任何运气。如果有人知道我可以参考的一些参考文件,请告诉我。

无法找到一种方法来返回没有额外字符的数据,我尝试通过 dataweave 替换它们。\n替换and时这很好\r,但由于每个双引号前面还有更多\s ,我似乎无法让这些消失。

如果我这样做...

replace (/\/) with ("")

...我得到一个错误。一位同事建议针对每个\"并将它们替换为",但这是一个问题,因为这给了我""". 为了解决这个问题,我试过了

replace(/\"/) with "\""

...这不会导致任何错误,但由于某种原因,它将 the 读取\为文字,因此它将原始字符串替换为自身。我也试过...用'"'替换(/\"/)...但这也会导致错误

我也对任何其他解决方案持开放态度。

谢谢

——画了

4

2 回答 2

3

我有同样的担忧,所以我开始使用该readUrl()方法。这是一种 DataWeave 方法,因此您应该能够在任何 MUnit 处理器中使用它。这是我如何在设置事件处理器中使用它的示例。它读取 JSON 文件,然后根据我自己的需要将其转换为 Java,但您可以根据需要将 java 替换为 JSON。

<munit:set-event doc:name="Set Event" doc:id="e7b1da19-f746-4964-a7ae-c23aedce5e6f" >
        <munit:payload mediaType="application/java" value="#[output application/java --- readUrl('classpath://singleItemRequest.json','application/json')]"/>
</munit:set-event>

这是 readUrl 的文档https://docs.mulesoft.com/mule-runtime/4.2/dw-core-functions-readurl

希望有帮助!

于 2019-08-02T20:49:09.037 回答
1

按照这个片段(更具体地说是munit-tools:then-return标签):

<munit-tools:mock-when doc:name="Mock GET /users" doc:id="89c8b7fb-1e94-446f-b9a0-ef7840333328" processor="http:request" >
    <munit-tools:with-attributes >
        <munit-tools:with-attribute attributeName="doc:name" whereValue="GET /users" />
    </munit-tools:with-attributes>
    <munit-tools:then-return>
        <munit-tools:payload value="#[read(MunitTools::getResourceAsString('examples/responses/anypoint-get-users-response.json'), &quot;application/json&quot;)]" />
    </munit-tools:then-return>
</munit-tools:mock-when>

它模拟一个 HTTP 请求并使用该read()函数返回一个 JSON 对象。

于 2019-09-20T06:32:14.753 回答