如何在Munit中编写负面测试用例

时间:2016-05-02 08:39:10

标签: java mule munit

我正在写一个负面测试用例,我必须在流程中创建一个例外。我希望全局异常策略能够捕获它,以便我可以断言响应。 在GlobalExceptionStrategy中,我们根据异常错误代码设置了一些错误代码。意图是确保异常策略正在发挥作用。

问题如下..  我可以使用runFlow()运行流程。  这个方法会抛出MuleException,它永远不会调用异常starategy。

我有什么方法可以将其提供给异常策略,然后从中得到响应......?

1 个答案:

答案 0 :(得分:0)

在你的例子中我不会遵循一些事情,所以我会尽力做出假设,我们可以从那里开始。

首先,您不应该验证异常策略是否正常工作。也就是说,如果你输入一个异常,你需要假设异常策略(它是一个Mule组件)正常工作,并且它会捕获异常。否则,您将最终测试每个组件。

更准确的测试是确保流程正在抛出正确的异常(您可以使用MUnit执行此操作)。

如果你要验证的是异常策略中的逻辑是否正常工作,我会说它足够复杂,你想要测试它,因此它应该至少在一个子流程中。通过这种方式,您可以验证子流是否正常工作。

现在更多的是你所描述的,如果你执行runFlow并且异常没有得到缓存是因为生产代码可能有错误。你提到了一个全局异常策略,所以基于这个是一个示例代码(我认为)你的代码应该是这样的:

 <configuration defaultExceptionStrategy-ref="zCatch_Exception_Strategy" doc:name="Configuration" />
    <flow name="zFlow">
        <scripting:component doc:name="Groovy">
            <scripting:script engine="Groovy"><![CDATA[throw new java.lang.RuntimeException()]]></scripting:script>
        </scripting:component>

    </flow>
    <catch-exception-strategy name="zCatch_Exception_Strategy">
        <logger message="+++ ERROR" level="INFO" doc:name="Logger"/>
        <set-variable variableName="error_var" value="#['value]" doc:name="Variable"/>
    </catch-exception-strategy>

请注意,除了全局例外策略之外,您还需要定义 defaultExceptionStrategy

<configuration defaultExceptionStrategy-ref="zCatch_Exception_Strategy" doc:name="Configuration" />

这将导致您的流异常被该异常处理。如果不这样做,异常策略将永远不会知道抛出了异常。

这里说的是测试代码:

  <munit:test name="z-test-suite-zFlowTest" description="Test">
        <flow-ref name="zFlow" doc:name="Flow-ref to zFlow"/>
        <munit:assert-on-equals message="oops" expectedValue="#['value']" actualValue="#[flowVars['error_var']]" doc:name="Assert Equals"/>
    </munit:test>

现在你说你使用了runFlow,我认为你正在使用基于Java的测试(尽管我建议你使用基于XML的测试方法),这是一个Java示例:

@Test
    public void theTest() throws MuleException, Exception {
        MuleEvent result = runFlow("zFlow", testEvent(""));

        String v = (String) result.getMessage().getProperty("error_var", PropertyScope.INVOCATION);
        Assert.assertEquals("value", v);
    }

HTH