我正在编写一项规则,以根据申诉的类别确定应接受的服务类型。
我写了一个jUnit联调来使用一个新创建的java对象来测试该规则,该对象名为“申诉DTO”。
@Test
public class RuleTest {
@Autowired
private GrievanceRuleService grievanceRuleService;
@Autowired
public KieContainer kieContainer;
@Test
public void calculateEligibility() {
Long id = (long) 1;
GrievanceDTO grievanceDTO = new GrievanceDTO(id,"NA", "Access/Availability", "NA", "NA", "NA", "NA", "NA");
String serviceType = grievanceRuleService.determineGrievance(grievanceDTO);
assertNotNull(serviceType);
}
}
我写了一个服务类来取消规则。
@Service
public class GrievanceRuleService {
@Autowired
public KieContainer kieContainer;
public String determineGrievance(GrievanceDTO grievanceDTO) {
KieSession kieSession = kieContainer.newKieSession();
kieSession.setGlobal("grievanceDTO", grievanceDTO);
kieSession.insert(grievanceDTO);
kieSession.fireAllRules();
kieSession.dispose();
return grievanceDTO.getServiceType();
}
}
jUnit测试失败。
java.lang.NullPointerException在cm.grievance.rules.规则est.calculate资格(规则est.java:13)
我用KieContainer bean编写了一个单独的配置类,并将其自动连接到我的服务。
@Configuration
@EnableJpaRepositories
@ComponentScan("dm.vantage.producer.service")
public class RuleConfiguration {
public static final String grivFile = "/src/main/resources/drools/GrievanceRules.drl";
@Bean
public KieContainer kieContainer() {
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
kieFileSystem.write(ResourceFactory.newClassPathResource(grivFile));
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
KieModule kieModule = kieBuilder.getKieModule();
return kieServices.newKieContainer(kieModule.getReleaseId());
}
}
最后是我的规则(DRL)文件,为了测试的目的,我尽可能简化了它。
package drools;
//generated from Decision Table
import cm.grievance.service.dto.GrievanceDTO;
rule "grievancesMap_10"
when
$grievances:GrievanceDTO($grievances.getCategory().equals("NA"))
then
$grievances.setServiceType("Timely Access");
end
我可以添加dto,但基本上它的第四个字段是“category”,第三个字段是“serviceType”。
我不知道为什么我会得到一个空指针,因为我已经测试了它,它应该用一些值填充return语句。
我能找出问题所在。这是一行代码。
GrievanceDTO grievanceDTO = new GrievanceDTO(id,"NA", "Access/Availability", "NA", "NA", "NA", "NA", "NA");
我使用setter方法替换了变量的赋值,而不是这个实例化。
我们有一个使用Drools规则的遗留Java/Spring项目。有什么方法可以在IntelliJ上调试规则文件,比如添加断点和单步执行规则逻辑?
我的要求是,触发第二条规则,然后停止进程而不触发第三条规则
在为我的项目实现了一些规则之后,我做了一个“ScoreConsistencyCheck”,以确保规则得到了正确的实现。 表示实现我自己的方法,该方法将在我提前终止求解或通过配置终止后调用,输出预期分数。该方法的参数是一个实例,基于解决方案的状态计算预期分数,然后将其与来自解决方案实例的“分数”变量的分数进行比较。 当我使用时,它不会抛出异常,但是当我这样尝试时,我有时会在构建启发式或本地搜索的特定
问题内容: 我正在使用JavaScript测试运行程序“摩卡”。 我的测试失败了,因此我将使用进行调试。 但是运行测试时,没有输出(仅来自Mocha的测试结果)。看来Mocha已捕获并抑制了我的输出! 如何让Mocha显示输出?(对于失败的测试)? 编辑: 抱歉!- 在测试期间可以正常工作!我肯定一直期望它抑制输出,而且我没有正确检查自己的代码。感谢您的回应。所以…话虽如此…也许抑制通过测试的输出
我想针对使用回调参数的RESTendpoint编写一些测试。可能听起来很困惑,所以这里有一个解释: > 服务器回复200和一些json 服务器向(基于提供的回调URL),带有一些json负载 我使用TestNG和Rest assured(非强制性)构建了一个测试。我的问题是如何验证初始回复和在回调URL处接收的消息。我首先想到的一种(可能是幼稚的)方法是实现一个HTTP服务器,它侦听,当有东西出现
在我的应用程序中有,它有一个操作,如下所示: 现在,我正在测试视图和模型,如下所示: 但是我的测试用例失败了,stacktrace如下: 正在运行2个spock测试。。。第1页,共2页 有什么问题吗。