How to write junit test case for thread run method

Viewed 4603

I have public void run() method. Inside of run method i'm calling three(CurrentDate,generateReport and update) more methods like below. My doubt is, for run method i don't have any parameter to pass Details object. How to pass Details object to run method from junit test method. I have googled lot but no solution.

@Override
public void run() {

    while(true) { 
        Details Obj = ruleQueue.peek();
        if(Obj != null && CurrentDate(Obj)) {
            ruleQueue.poll();

            Generator generator = new Generator();
            generator.generateReport(Obj.getId(),Obj.getLastExec(), ruleObj.getnextExec());

            updateDate(Obj);
            try {
                dao.update(Obj);

            }
            catch (DocumentClientException e) {
                logger.error(e);
            }
        }
    }
}
1 Answers

You can't pass any arguments to the overridden run method. If you pass it's no longer overridden it's overloaded.

So better use the Thread constructor to share objects:

class MyThread implements Runnable{

    private Details details;

    public MyThread(Details details){
        this.details = details;
    }


    @Override
    public void run(){

        // Use details here
    }

}

For testing or calling this Thread:

Details details = new Details();
MyThread t = new Mythread(details);
t.start();
Related