如何在不调用规则的情况下测试drool文件中存在的功能?

时间:2019-07-12 09:20:07

标签: java junit drools rule-engine jboss-rules

我想为我的规则文件做junit。我的规则文件大致有两件事,一是规则,另一是我从规则的 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()函数。

1 个答案:

答案 0 :(得分:0)

如果只想对规则中的函数进行单元测试,建议将其移动到单独的类文件中的静态方法中。您可以轻松地对该单元进行测试。

例如打印为静态方法的类

package my.package
public class MyFunctions {
    public static void print(String string){
        System.out.println(string);
    }
}

然后,您可以通过将函数定义替换为import语句,将静态方法作为函数导入规则中:

import function my.package.MyFunctions.print