This idea -- creating some kind of "JessUnit" -- comes up from time to time. I've solicited ideas, but unfortunately the conversation tends to die down too quickly. I think just using JUnit along with some custom fixtures -- for example, the "assertRuleFired" built using JessEvents that other people have suggested -- is just about all anyone really needs.

There's some material in "Jess in Action" about testing, and our friend George Williamson has written some stuff here:

http://www.jessrules.com/jesswiki/view?TestingStrategies



On Nov 14, 2009, at 3:02 PM, Socrates Frangis wrote:

That is what I am doing as of now. Its just that JUnit test cases begin to grow and grow and when I noticed how lisp-unit and even the JB tester are implemented, they were a little more clean cut and fit better for testing a rulebase than just making many Unit tests that (create rete object, batch CLP, shove in fatcs, and try to get results out).

I am in a situation where I will not be able to modify the beans used in the fact base, they are read only, so I have no luxury of the rules setting a flag in the bean and having JUnit check to see if the flag was set. So I am currently using a String Writer and grabbing the "t" output router. Then doing horrible string.equals in my test cases to see if the expected result is what I expect. Aside from watchAll() dumping everything, is there a way to just check if certain rules fired in a Rete object by passing in their name? Something like the following would be ideal, if there was a boolean RuleFired method:

@Test
public void test_Rule_1_Fired(){
   //Lets just forget about the Try/Catch blocks for now...
   Rete engine = new Rete();
   ExampleBean b = new ExampleBean(12345,first,last);
   engine.add(b);
   engine.batch(rules.clp);
   engine.run();

   boolean result = engine.RuleFired("rule-number-one");

   assertTrue(result == true);
}

Does something like RuleFired exist and I just missed it in the documentation?

On Fri, Nov 13, 2009 at 10:59 PM, Wolfgang Laun <wolfgang.l...@gmail.com > wrote: You can create a Rete object and feed it with rules and facts from Java code. So you could use JUnit to test individual rules with different fact combinations. I see no reason why this should not give you satisfactory results. Also, notice that the Rete mehod eval lets you pass gobs of CLP to a Rete object.
-W

On Sat, Nov 14, 2009 at 1:03 AM, Socrates Frangis <soc.fran...@gmail.com > wrote: Ive been looking around for any good implementation of Unit Testing on Jess Rules. LispUnit http://www.cliki.net/lisp-unit provides something similar for Lisp and I've been messing around with JUnit and 'shoe-horning' inputs / expected results. Just wondering if anyone has came up with a productive way of testing declarative programming when only something procedural (JUnit) is available.

-Socrates Frangis



---------------------------------------------------------
Ernest Friedman-Hill
Informatics & Decision Sciences, Sandia National Laboratories
PO Box 969, MS 9012, Livermore, CA 94550
http://www.jessrules.com







--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users y...@address.com'
in the BODY of a message to majord...@sandia.gov, NOT to the list
(use your own address!) List problems? Notify owner-jess-us...@sandia.gov.
--------------------------------------------------------------------

Reply via email to