Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Drools testing with junit

What is the best practice to test drools rules with junit?

Until now we used junit with dbunit to test rules. We had sample data that was put to hsqldb. We had couple of rule packages and by the end of the project it is very hard to make a good test input to test certain rules and not fire others.

So the exact question is that how can I limit tests in junit to one or more certain rule(s) for testing?

like image 474
Hubidubi Avatar asked Oct 05 '10 09:10

Hubidubi


People also ask

How do I run drools?

Choose File > New > Drools Project. Now you can choose to create a new project with example files and click Next. Enter a project name, select the drools runtime created earlier, and select Add a sample HelloWorld rule file to this project. Click Finish.


1 Answers

Do not attempt to limit rule execution to a single rule for a test. Unlike OO classes, single rules are not independent of other rules, so it does not make sense to test a rule in isolation in the same way that you would test a single class using a unit test. In other words, to test a single rule, test that it has the right effect in combination with the other rules.

Instead, run tests with a small amount of data on all of your rules, i.e. with a minimal number of facts in the rule session, and test the results and perhaps that a particular rule was fired. The result is not actually that much different from what you have in mind, because a minimal set of test data might only activate one or two rules.

As for the sample data, I prefer to use static data and define minimal test data for each test. There are various ways of doing this, but programmatically creating fact objects in Java might be good enough.

like image 103
Peter Hilton Avatar answered Oct 29 '22 18:10

Peter Hilton