- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个负面测试用例,其中我必须在流程中创建异常。我希望全局异常策略能够捕获它,以便我可以断言响应。在 GlobalExceptionStrategy 内部,我们根据异常错误代码设置一些错误代码。目的是确保异常策略有效。
问题如下.. 我可以使用 runFlow() 运行流程。 这个方法会抛出 MuleException 并且永远不会调用异常策略。
有什么方法可以将其提供给异常策略,然后从中获取响应...?
最佳答案
在你的例子中,有几件事我没有遵循,所以我会尽力做出假设,我们可以从那里开始。
首先,您不应该验证异常策略是否正常工作。也就是说,如果你抛出异常,你需要假设异常策略(这是一个 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
关于java - 如何在 Munit 中编写负面测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36978295/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!