Как запускать тесты JUnit с Drools, Java 8 и Maven?

#java #maven #java-8 #drools

#java #maven #java-8 #drools

Вопрос:

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

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

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

Аргумент виртуальной машины

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

Комментарии:

1. Можете ли вы поделиться кодом, в котором вы получаете NPE?

2. Готово, как я уже сказал, проблема не в NPE, потому что, когда я запускаю тот же код в приложении Java, он работает

3. @JulianSolarte: Как вы решили эту проблему?

4. Насколько я помню, я еще не смог решить эту проблему. Проголосуйте за вопрос, чтобы придать ему важность