【问题标题】:How to write negative test cases in Munit如何在 Munit 中编写负面测试用例
【发布时间】:2016-08-26 23:21:52
【问题描述】:

我正在编写一个否定测试用例,其中我必须在流程中创建一个异常。我希望全局异常策略能够捕获它,以便我可以断言响应。 在 GlobalExceptionStrategy 内部,我们正在根据异常错误代码设置一些错误代码。目的是确保异常策略有效。

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

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

【问题讨论】:

    标签: java mule munit


    【解决方案1】:

    在您的示例中,有几件事我没有遵循,所以我会尽最大努力做出假设,我们可以从那里开始。

    首先,您不应该验证异常策略是否正常工作。也就是说,如果你抛出一个异常,你需要假设异常策略(它是一个 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

    【讨论】:

    • 同意.. 但是在这里我没有更改代码的选项,以便它为 Munit 提供一些输入。那么我所在的地方就像死胡同吗?没有什么比我们可以从 runFlow 捕获异常并输入异常策略以便从中获取结果的地方更好的了?
    • 没有,抱歉没有
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多