【发布时间】:2016-10-20 23:18:47
【问题描述】:
我有一大堆规则,我正在尝试为它们编写一些单元测试。在我的测试中,我使用的是这个:
int rulesFired = kSession.fireAllRules(new RuleNameEqualsAgendaFilter("rule name 1"));
我注意到,尽管返回的规则数量为 1,但 Drools 仍会尝试针对满足条件的任何其他规则进行验证。我有时会收到来自未在我的规则名称等于议程过滤器中定义的其他规则的错误消息,因为条件匹配基于我在 kSession 中为单元测试插入的内容。
例如我有:
rule "test1"
when
$var : Map(this["key"] == "gold")
then
do something
end
rule "test2"
when
$var : Map(this["key"] == "gold" && this["other"] == "silver")
then
do something
end
在我对 rule1 的测试中,我有一张只有“key”的地图。当我使用“test1”的过滤器运行测试时,我将收到一个空指针,因为我的地图中没有“其他”的值,即使我正在过滤的规则不关心“其他”
为什么会这样?我在任何地方都找不到任何文档。就好像 Drools 必须在过滤之前验证我的 DRL 文件中的所有规则和语法。
【问题讨论】:
标签: java unit-testing testing drools