促销drools_请教Drools怎么处理超市打折促销

这是一个关于使用Drools进行规则引擎测试的代码示例。博客中展示了如何加载Excel决策表,创建KnowledgeBase,执行 StatelessKnowledgeSession,并通过JUnit进行参数化测试。测试涉及根据订单时间和总额来计算折扣总额。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我好久没用drools,看见没人回复,我就翻了下原来的代码,希望能帮助到你。

测试父类

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.util.Arrays;

import java.util.Collection;

import java.util.Map;

import org.drools.KnowledgeBase;

import org.drools.KnowledgeBaseFactory;

import org.drools.builder.DecisionTableConfiguration;

import org.drools.builder.DecisionTableInputType;

import org.drools.builder.KnowledgeBuilder;

import org.drools.builder.KnowledgeBuilderFactory;

import org.drools.builder.ResourceType;

import org.drools.definition.KnowledgePackage;

import org.drools.io.ResourceFactory;

import org.drools.runtime.StatelessKnowledgeSession;

public class KATestBase {

public void testExcel(String fileName, Map params)

throws Exception {

System.out.println("---------------begin------------------------");

DecisionTableConfiguration dtableconfiguration = KnowledgeBuilderFactory

.newDecisionTableConfiguration();

dtableconfiguration.setInputType(DecisionTableInputType.XLS);

final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory

.newKnowledgeBuilder();

File file = new File("E:\\workspace\\epct\\rule\\src\\test\\resources\\"

+ fileName);

InputStream is = new FileInputStream(file);

//InputStream is = new ClassPathResource(fileName).getInputStream();

kbuilder.add(ResourceFactory.newInputStreamResource(is,"UTF-8"),

ResourceType.DTABLE);

if (kbuilder.hasErrors()) {

System.out.println(kbuilder.getErrors().toString());

}

Collection pkgs = kbuilder.getKnowledgePackages();

KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();

kbase.addKnowledgePackages(pkgs);

StatelessKnowledgeSession ksession = kbase

.newStatelessKnowledgeSession();

ksession.execute(Arrays.asList(new Object[] {params}));

System.out.println("---------------end------------------------");

}

测试子类:

import java.util.Arrays;

import java.util.Collection;

import java.util.HashMap;

import java.util.Map;

import junit.framework.Assert;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.junit.runners.Parameterized;

import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)

public class DroolsTest extends KATestBase{

private KADest param;

private String extected;

public DroolsTest(KADest param,String extected) {

this.param = param;

this.extected = extected;

}

public static class KADest {

private String orderTime;

private String orderTotal;

public KADest(String orderTime, String orderTotal) {

this.orderTime = orderTime;

this.orderTotal = orderTotal;

}

public Map getParams(){

Map params = new HashMap();

params.put("orderTime", orderTime);

params.put("orderTotal", orderTotal);

params.put("discountTotal", 0);

return params;

}

}

@Parameters

public static Collection> contructData(){

return Arrays.asList(new Object[][]{

{new KADest("2013-01-02 12:30:31","6"),"3"},

{new KADest("2013-01-02 12:30:31","1"),"0"},

{new KADest("2013-01-02 12:30:31","2"),"1"},

{new KADest("2013-01-01 12:30:31","2"),"1"},

{new KADest("2013-01-01 12:30:31","2"),"1"},

{new KADest("2013-01-01 12:30:31","2"),"1"},

{new KADest("2013-01-04 12:30:31","2"),"0"},

{new KADest("2013-01-04 12:30:31","2"),"0"},

{new KADest("2013-01-04 12:30:31","2"),"0"},

});

}

@Test

public void testKaDest() throws Exception{

Map params = new HashMap();

params.putAll(param.getParams());

System.out.println(params);

super.testExcel("ka/drools.xls", params);

System.out.println(params);

Assert.assertEquals(extected, "" +params.get("discountTotal"));

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值