[rules-users] Isn't it possible to mock a global with e.g. Mockito or EasyMock

dhermanns d.hermanns at lvm.de
Mon Feb 7 04:47:39 EST 2011


Hi everybody,

i'm trying to mock a global using Mockito but Drools is always complaining:

Caused by: java.lang.ClassCastException:
de.lvm.verteilung.monitoring.VerteilungServicesMonitoringMBean$$EnhancerByMockitoWithCGLIB$$df2ff492
incompatible with
de.lvm.vorverteilung.monitoring.VorverteilungServicesMonitoringMBean
	at
ServiceProzesse.Verteilung.Vertreterregeln.Rule_Vertretung_nach_Endnummer_0DefaultConsequenceInvoker.evaluate(Rule_Vertretung_nach_Endnummer_0DefaultConsequenceInvoker.java:22)
	at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:917)
	... 31 more

It seems that it has problems with the created subclass from Mockito. I get
the same
ClassCastException when trying this with EasyMock.

Here is my Unit-Test:

		KnowledgeBase knowledgeBase = createKnowledgeBase();
		StatelessKnowledgeSession ksession =
knowledgeBase.newStatelessKnowledgeSession();

		VerteilungServicesMonitoringMBean monitoring =
mock(VerteilungServicesMonitoringMBean.class);

		Arbeitsanstoss arbeitsanstoss = new ArbeitsanstossImpl();
		arbeitsanstoss.setBenutzerId("m500516");

		VerteilSperreController verteilSperreService =
mock(VerteilSperreController.class);
		when(verteilSperreService.istVerteilSperreAktiv("m500516",
Ausgangskanal.LAS_BRIEFKASTEN)).thenReturn(true);
		
		ksession.setGlobal("monitoring", monitoring);
		ksession.setGlobal("verteilSperreService", verteilSperreService);

		ksession.execute(arbeitsanstoss);

And my drl:
package ServiceProzesse.Verteilung.Vertreterregeln

import de.lvm.vorverteilung.services.types.SystemseitigerAnstoss;
import de.lvm.vorverteilung.services.types.Arbeitsanstoss;
import de.lvm.vorverteilung.monitoring.VorverteilungServicesMonitoringMBean;
import de.lvm.verteilung.sperre.VerteilSperreController;
import de.lvm.verteilung.sperre.Ausgangskanal;

global VorverteilungServicesMonitoringMBean monitoring;
global VerteilSperreController verteilSperreService; 

rule "Vertretung nach Endnummer"
	when
		$a : Arbeitsanstoss()
		eval( verteilSperreService.istVerteilSperreAktiv($a.getBenutzerId(),
Ausgangskanal.LAS_BRIEFKASTEN) )
	then
		monitoring.log("Vertretung nach Endnummer");
		System.out.println("hello2");
end

Any ideas?

Thanks in advance,
Dirk
-- 
View this message in context: http://drools-java-rules-engine.46999.n3.nabble.com/Isn-t-it-possible-to-mock-a-global-with-e-g-Mockito-or-EasyMock-tp2442072p2442072.html
Sent from the Drools - User mailing list archive at Nabble.com.



More information about the rules-users mailing list