1

我想为我的规则文件做junit。我的规则文件大致有两件事:

  1. 一条规则
  2. 我从规则的部分调用的辅助函数(在 drools 中,而不是 Java 中)

现在我想根据测试用例单独测试(断言)这个函数。有没有办法做到这一点?

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() 函数。

4

1 回答 1

1

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

例如带有 print 作为静态方法的类

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

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

import function my.package.MyFunctions.print
于 2019-07-28T12:58:51.393 回答