使用junit-drools进行JBoss Drools单元测试

最近,我一直在大量使用JBoss Drools进行项目。 我不是Drools专家-我也不太相信这个框架,或者可能不是只相信该项目中的特定用例-我发现很难为基于Drools的业务规则编写简单,可维护的单元测试

这就是junit-drools诞生的方式-简单的帮助程序库,使您无需编写太多样板代码即可编写Drools测试(如在Drools JBoss Rules 5.X开发人员指南示例中所见 )。 unit醇

安装

将Maven存储库和依赖项添加到pom.xml:

<repository>
    <id>maciejwalkowiak.pl</id>
    <url>https://github.com/maciejwalkowiak/maven-repo/raw/releases/</url>
</repository>
<dependency>
    <groupId>pl.maciejwalkowiak</groupId>
    <artifactId>junit-drools</artifactId>
    <version>1.0</version>
    <scope>test</scope>
</dependency>

用法

junit-drools提供了DroolsJUnitRunner类,该类处理您为设置知识库和Drools会话而需要编写的大多数样板代码。

让我们考虑以下示例:

@RunWith(DroolsJUnitRunner.class)
@DroolsFiles(value = "helloworld.drl", location = "/drl/")
public class AppTest {

    @DroolsSession
    StatefulSession session;

    @Test
    public void should_set_discount() {
        Purchase purchase = new Purchase(new Customer(17));

        session.insert(purchase);
        session.fireAllRules();

        assertTrue(purchase.getTicket().hasDiscount());
    }

    @Test
    public void should_not_set_discount() {
        Purchase purchase = new Purchase(new Customer(22));

        session.insert(purchase);
        session.fireAllRules();

        assertFalse(purchase.getTicket().hasDiscount());
    }
}
  • @RunWith(DroolsJUnitRunner) –用于测试Drools规则的JUnit运行器
  • @DroolsFiles –设置drl文件的位置(可以是一个或多个)– drl文件必须位于类路径上– @ DroolsFiles#location相对于src/test/resourcessrc/main/resources
  • @DroolsSession –在执行之前将Drools会话自动注入到您的测试中

在Github上项目的src / test目录中找到带drl文件的完整示例。

如果您不想使用DroolsJUnitRunner,例如因为您已经想使用Mockito或SpringRunner,则可以在@Before方法中初始化Drools对象:

@DroolsFiles(value = "helloworld.drl", location = "/drl/")
public class BeforeMethodBasedTest {
    @DroolsSession
    StatefulSession session;

    @Before
    public void initDrools() throws Exception {
        new DroolsInjector().initDrools(this);
    }

    @Test
    public void should_set_discount() {
        Purchase purchase = new Purchase(new Customer(17));

        session.insert(purchase);
        session.fireAllRules();

        assertTrue(purchase.getTicket().hasDiscount());
    }
}

我对Drools的经验不是很丰富,所以该库实际上完成了我正在处理的项目中需要的工作。 欢迎您通过向Github项目发送拉取请求来添加您的改进。

参考:来自JCG合作伙伴 Maciej Walkowiak的junit- drool的JBoss Drools单元测试,来自Software Development Journey博客。

翻译自: https://www.javacodegeeks.com/2013/11/jboss-drools-unit-testing-with-junit-drools.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值