如何使用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类中,但它仍然不起作用:
聚甲醛
`
<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) 个答案