郁闷,用junit测试quartz,无法正常运行

土匪强 发布于 2012/02/28 16:20
阅读 2K+
收藏 0

今天由于项目需要,重温一下quartz的使用,随手copy了一下代码,来个整体的感觉:

先是job的代码:

package com;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class JobSchool implements Job {

	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		// TODO Auto-generated method stub
		System.out.println("go to school***");
	}

}

然后是测试类的代码:

@Test 
public void test() throws SchedulerException{

	 SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
	 Scheduler sched = schedFact.getScheduler();
         sched.start();

         JobDetail jobDetail = new JobDetail("myJob",Scheduler.DEFAULT_GROUP,job.class);
	 
         SimpleTrigger trigger = new SimpleTrigger("testTrigger", Scheduler.DEFAULT_GROUP);
         trigger.setRepeatCount(6);
	 trigger.setRepeatInterval(500);
	 trigger.setStartTime(Calendar.getInstance().getTime());  

	 sched.scheduleJob(jobDetail, trigger);
		
}

 测试结果:

 

很奇怪,明明设了执行六次,每次半秒间隔,但是执行结果确实让人摸不着头脑……
后来用一下的代码测试就行了:

public static void main(String[] a) throws SchedulerException{

	 SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
	 Scheduler sched = schedFact.getScheduler();
         sched.start();

         JobDetail jobDetail = new JobDetail("myJob",Scheduler.DEFAULT_GROUP,job.class);
	 
         SimpleTrigger trigger = new SimpleTrigger("testTrigger", Scheduler.DEFAULT_GROUP);
         trigger.setRepeatCount(6);
	 trigger.setRepeatInterval(500);
	 trigger.setStartTime(Calendar.getInstance().getTime());  

	 sched.scheduleJob(jobDetail, trigger);
		
}

这到底是为什么啊,浪费我大量的时间啊

 

 

加载中
0
7
7先生
因为junit不能测试多线程的东西,而quartz是在线程中去执行的。所以不能。涉及到线程的测试最好用main函数去测试,或者使用GroboUtils等支持多线程的框架+junit,具体可以百度一下GroboUtils+junit即可



0
FutureTime
FutureTime
可以把当前junit的方法sleep一段时间就行了
0
宇你平安

junit测试在TestRunner类里开启main方法来进行对方法的测试,main方法里有System.exit();测试多线程时main线程会执行System.exist(),jvm就会结束运行,不执行其他线程

0
R-Lu
R-Lu

我也异步处理的时候碰到到这个问题,所以我在TEST方法用 SLEEP休眠一下。

返回顶部
顶部