FIT for rules
Keep your business rules in shape
Built on FIT http://fit.c2.com
This is an example fit document
that also describes how fit-for-rules works. Fit-for-rules aims to provide a
framework to functionally test your rules. As with the FIT (http://fit.c2.com)
philosophy, the aim is to allow collaboration between domain experts and
developers in specifying rules logic in a test driven fashion.
Moreover, it allows these
“acceptance criteria” to become automatically executable tests that can become
part of a test suite that regression tests rules (rule can change often, so it’s
good to have a baseline of tests). The documents are ideally documentation
mixed up with the test data (which is tables) – for multiple scenarios that the
rules may need to deal with. They could also be used to do “what if” scenario
testing (with old or new rules).
·
First step is to
setup the objects that will be used in the rule.
o 1st column is Class
o 2nd is the name that instance will be referred
to
o 3rd is for (optional) constructor (can be
another object, or a static field to initialize)
o It will create new instances for each object declared
Rules.fixture.Setup |
||
com.yourco.Driver |
Driver |
|
·
Second step is
to populate the objects that were declared in the first step.
o 1st column maps up with the object name
o 2nd column is a method (spaces and case
are ignored – typically set method)
o 3rd column is the value (it will convert
it as appropriate)
o It can also cope with method parameters by using “(“ braces
“)”
Rules.fixture.Populate |
||
Driver |
Set age |
42 |
Driver |
Set number of accidents |
2 |
Driver |
Set name |
Bob |
·
Third step is to
invoke the rule engine
o Provider sets up the JSR-94 provider (URI, provider classname).
o Ruleset loads the ruleset (takes a
url, or a path to a file, classpath
etc)
o Assert pushes the object into the rule engine (use
“All” if you want all of them).
o Execute fires the rules
Rules.fixture.Engine |
||
Provider |
http://drools.org |
org.drools.jsr94.rules.RuleServiceProviderImpl |
Ruleset |
C:/InsureApprove.drl |
|
Assert |
Driver |
|
Execute |
|
|
·
Fourth step
checks the results, by comparing actual values with expected values (values are
accessed from the objects that were setup in the first step).
o 1st
column is the object name from first step
o 2nd column is the getter method (indexed
getters are supported with “(“ )
o 3rd column is the value (with appropriate
auto type conversions).
Rules.fixture.Results |
||
Driver |
Get Name |
Bob |
Driver |
Is Approved |
True |
Driver |
Get Age |
42 |
·
You can
optionally reset the domain objects, in case you want to do multiple clean test
runs in the one test document
Rules.fixture.Clear |
·
With FIT, you
can get a summary printed in the output report by using the following table
fit.Summary |
|
counts | 32 right, 0 wrong, 22 ignored, 0 exceptions |
input file | C:\Projects\fit-for-rules-new\doc\fit-for-rules.html |
input update | Thu May 11 20:23:13 EST 2006 |
output file | C:\Projects\fit-for-rules-new\doc\test-result.html |
run date | Thu May 11 20:23:51 EST 2006 |
run elapsed time | 0:01.28 |
You can use Word, Open Office, Excel etc – any thing that can output HTML tables.
After executing, review the
resulting report.
For download, see the project homepage http://sourceforge.net/projects/fit-for-rules
©
You can reach me on the Drools
mailing list.
http://www.jboss.com/products/rules
FAQ: why is this HTML so messed
up? Because it came from MS Word, just like a FIT test would (it is a fit test document!). You may get
better results with Excel, or Open Office, but it doesn’t matter, FIT copes.