Как запустить тесты JUnit с Drools, Java 8 и Maven? - PullRequest
0 голосов
/ 01 апреля 2019

Я работаю с Drools и Maven, и для решения проблемы ClassFormatException, сгенерированной из-за использования Java 8 и Drools, я использовал Janino для компиляции, как упомянуто здесь https://issues.jboss.org/browse/DROOLS-329.

Когда я запускаю его как приложение Java, оно работает хорошо, но когда я запускаю его как тест JUnit, я получаю исключение NullPointer (Да! Я уверен, что это не ноль, я пробую тот же пример, что и приложение Java, и хорошо работает).

Я уже добавил аргументы VM в класс JUnit, но он все равно не работает:

VM argument

POM

`

    <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 ("данные", данные); линия

`

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, и он работает

...