我想为我的规则文件做 junit。我的规则文件大致有两件事:
- 一条规则
- 一个辅助函数(在流口水中,而不是 Java(,我从规则的 then 部分调用它
现在我想根据测试用例隔离地测试(断言(这个函数。 有什么办法可以做到这一点吗?
function void print(String string){
System.out.println(string);
return true;
}
rule "XXYJK"
dialect "mvel"
salience 10
when
objofTheclass : exampleClass() eval
(
objofTheclass.isKeyMatched("XXYJK")
)
then
print("XXYJK");
end
现在我可以像这样从 java 代码中调用此规则。
statelessSession.setAgendaFilter(new RuleNameEqualsAgendaFilter("XXYJK"));
statelessSession.executeWithResults(rulesEngineParameters);
现在我想做类似的事情,而无需调用规则本身或执行整个drl文件。只有我想调用的 print(( 函数。
如果您只想在规则中对函数进行单元测试,我建议您将其移动到单独的类文件中的静态方法。您可以轻松地对其进行单元测试。
例如.class打印作为静态方法
package my.package
public class MyFunctions {
public static void print(String string){
System.out.println(string);
}
}
然后,您可以通过将函数定义替换为导入语句来将静态方法作为函数导入规则中的函数:
import function my.package.MyFunctions.print