有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用Drools、Java8和Maven运行JUnit测试?

我正在使用Drools和Maven,为了解决由于使用Java8和Drools而生成的ClassFormatException,我使用Janino进行编译,正如这里提到的https://issues.jboss.org/browse/DROOLS-329

当我像Java应用程序一样运行它时,它工作得很好,但当我像JUnit test一样运行它时,我得到一个NullPointer异常(是的!我确定它不是null,我像Java应用程序一样尝试相同的示例,它工作得很好)

我已经将VM参数添加到JUnit类中,但它仍然不起作用:

VM argument

聚甲醛

`

    <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <!-- https://mvnrepository.com/artifact/org.drools/drools-core -->
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-core</artifactId>
        <version>7.18.0.Final</version>
    </dependency>

    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
        <version>7.18.0.Final</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.codehaus.janino/janino -->
    <dependency>
        <groupId>org.codehaus.janino</groupId>
        <artifactId>janino</artifactId>
        <version>2.5.16</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>


</dependencies>

`

JUnit类,sessionStatefull处出现空指针异常。setGlobal(“datos”,datos);线

`

public class TestRules {
static KieContainer kieContainer;
StatelessKieSession sessionStateless = null;
KieSession sessionStatefull = null;

@BeforeClass
public static void beforeClass() {
    kieContainer = KnowledgeSessionHelper.createRuleBase();
}

@Test
public void testCuentasCoactivoLimite(){

    sessionStatefull= KnowledgeSessionHelper
            .getStatefulKnowledgeSession(kieContainer,"ksession-rules");
    Data datos=new Data();
    sessionStatefull.setGlobal("datos", datos);
    Embargo embargo=new Embargo("e1",LocalDate.of(2018, 11, 24),TipoEmbargo.COACTIVO,new BigDecimal(18000000));
    sessionStatefull.insert(embargo);
    ArrayList<Persona> personas=new ArrayList<>();
    personas.add(new Persona("p1", "e1",TipoIdentificacion.NATURAL, new BigDecimal(6000000)));
    personas.add(new Persona("p2", "e1",TipoIdentificacion.NATURAL, new BigDecimal(6000000)));
    personas.add(new Persona("p3", "e1",TipoIdentificacion.JURIDICA, new BigDecimal(6000000)));
    personas.stream().forEach(x->sessionStatefull.insert(x));
    ArrayList<Cuenta> cuentas=new ArrayList<>();
    //p1
    cuentas.add(new Cuenta("c1","p1","e1",TipoCuenta.AHORROS,SubtipoCuenta.BASICA,LocalDate.of(2014, 05, 26),
                            new BigDecimal(17000000),EstadoCuenta.ACTIVA));
    cuentas.add(new Cuenta("c2","p1","e1",TipoCuenta.AHORROS,SubtipoCuenta.BASICA,LocalDate.of(2015, 05, 26),
                            new BigDecimal(3000000),EstadoCuenta.ACTIVA));
    cuentas.add(new Cuenta("c3","p1","e1",TipoCuenta.CORRIENTE,SubtipoCuenta.BASICA,LocalDate.of(2016, 05, 26),
                            new BigDecimal(2000000),EstadoCuenta.ACTIVA));
    //p2
    cuentas.add(new Cuenta("c4","p2","e1",TipoCuenta.AHORROS,SubtipoCuenta.BASICA,LocalDate.of(2016, 05, 26),
                            new BigDecimal(3000000),EstadoCuenta.ACTIVA));
    cuentas.add(new Cuenta("c5","p2","e1",TipoCuenta.CDT,SubtipoCuenta.BASICA,LocalDate.of(2016, 05, 26),
                            new BigDecimal(1000000),EstadoCuenta.ACTIVA));
    cuentas.add(new Cuenta("c6","p2","e1",TipoCuenta.CDAT,SubtipoCuenta.BASICA,LocalDate.of(2016, 05, 26),
                            new BigDecimal(1000000),EstadoCuenta.ACTIVA));
    cuentas.add(new Cuenta("c7","p2","e1",TipoCuenta.ELECTRONICOS,SubtipoCuenta.PUBLICO,LocalDate.of(2016, 05, 26),
                            new BigDecimal(1000000),EstadoCuenta.ACTIVA)); 
    //p3
    cuentas.add(new Cuenta("c8","p3","e1",TipoCuenta.AHORROS,SubtipoCuenta.BASICA,LocalDate.of(2014, 05, 26),
                            new BigDecimal(37000000),EstadoCuenta.ACTIVA));
    cuentas.add(new Cuenta("c9","p3","e1",TipoCuenta.AHORROS,SubtipoCuenta.BASICA,LocalDate.of(2015, 05, 26),
                            new BigDecimal(3000000),EstadoCuenta.ACTIVA));
    cuentas.stream().forEach(x->sessionStatefull.insert(x));
    sessionStatefull.fireAllRules();
    imprimir(embargo, personas, cuentas);
}

`

我在一个Java类中运行上述代码,它可以正常工作


共 (0) 个答案