JBoss Community

jBPM JUnit tests are failing

created by Michael Wagner in jBPM - View the full discussion

Hi,

 

I have downloaded the junit tests from:

http://sourceforge.net/projects/jbpm/files/jBPM%205/jbpm-5.1.0.Final/jbpm-5.1.0.Final-examples.zip/download

 

First: big thank you for providing so many unit tests! Makes is absolutly clear how to use the api.

 

Running JBPM2UnitTests.java gives me always one failure in testTimerStart:

 

junit.framework.AssertionFailedError: expected:<5> but was:<4>

 

"Correcting" the value to 4 gives a failure in testTimerStartCron:

 

junit.framework.AssertionFailedError: expected:<5> but was:<6>

 

"Correcting" the value here to 6 gives no more failures any more.

 

     public void testTimerStartCron() throws Exception {
        KnowledgeBase kbase = createKnowledgeBase("BPMN2-TimerStartCron.bpmn2");
          StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
          final List list = new ArrayList();
          ksession.addEventListener(new DefaultProcessEventListener() {
               public void afterProcessStarted(ProcessStartedEvent event) {
                    list.add(event.getProcessInstance().getId());
               }
          });
          Thread.sleep(500);
        for (int i = 0; i < 5; i++) {
             ksession.fireAllRules();
             Thread.sleep(1000);
        }
        assertEquals(6, list.size());
    }
    
    public void testTimerStart() throws Exception {
        KnowledgeBase kbase = createKnowledgeBase("BPMN2-TimerStart.bpmn2");
          StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
          final List list = new ArrayList();
          ksession.addEventListener(new DefaultProcessEventListener() {
               public void afterProcessStarted(ProcessStartedEvent event) {
                    list.add(event.getProcessInstance().getId());
               }
          });
          Thread.sleep(250);
          assertEquals(0, list.size());
        for (int i = 0; i < 5; i++) {
             ksession.fireAllRules();
             Thread.sleep(500);
        }
        assertEquals(4, list.size());
    }
 

 

Besides that I cannot understand the values by reading the code: what I definitively do not understand is: how can somebody write tests depending on a "Thread.sleep"? Are there no events one could wait for? This gives a situation which is not deterministic! This is because time is not processor time.

 

Please tell me how the junit tests in these cases could be re-written in a deterministic way.

 

We are in an automotive area and cannot affort to run software which can not be testet in a deterministic way.

 

Michael

Reply to this message by going to Community

Start a new discussion in jBPM at Community