码迷,mamicode.com
首页 > 编程语言 > 详细

Java 线程测试框架

时间:2015-08-20 20:51:41      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:java   线程   测试   

《Java编程思想》中的测试框架整理: 
1、首先定义个一接口,仅用此接口表示在代码中提供有意义的名字,表示状态。

package com.jereh;

public interface InvariantState {}

2、定义两种状态类,表示成功或者失败,失败类对象包括一个对象,该对象表示有关失败的原因信息,这样一般是为了把这种信息显示出来。

package com.jereh;

public class InvariantOK implements InvariantState{}
package com.jereh;

public class InvariantFailure implements InvariantState{

    public Object value;

    public InvariantFailure(Object value){
        this.value = value;
    }
}

3.定义一个接口,任何需要对约束条件进行测试的类都必须实现这个接口:

package com.jereh;

public interface Invariant {    
    InvariantState invariant();
}

4.定义一个类并继承Timer,如果不出现异常状况则一段时间后自动结束程序:

package com.jereh;

import java.util.Timer;
import java.util.TimerTask;

public class Timeout extends Timer{

    public Timeout(int delay,final String msg){
        super(true);
        schedule(new TimerTask(){
            public void run(){
                System.out.println(msg);
                System.exit(0);
            }
        },delay);
    }
}

5.定义一个线程,使用Invariant接口和Timeout类,用来当作观察者:

package com.jereh;

public class InvariantWatcher extends Thread{
    private Invariant invariant;
    public InvariantWatcher(Invariant invariant){
        this.invariant = invariant;
        setDaemon(true);
        start();
    }

    public InvariantWatcher(Invariant invariant, final int timeOut){
        this(invariant);
        new Timeout(timeOut,"Timed out without violating invariant");
    }

    public void run(){
        while(true){
            InvariantState state = invariant.invariant();
            if(state instanceof InvariantFailure){
                System.out.println("Invariant violated:"+((InvariantFailure)state).value);
                System.exit(0);
            }
        }
    }
}

6.测试一下类,将观察者放入要测试的目标类中:

package com.jereh;

public class EvenGenerator implements Invariant{

    private int i ;

    public void next(){ i++; i++; }

    public int getValue(){ return i; }

    @Override
    public InvariantState invariant() {

        int val = i;
        if( val%2 == 0){
            return new InvariantOK();
        }else{
            return new InvariantFailure(new Integer(val));
        }
    }

    public static void main(String[] args){

        EvenGenerator gen = new EvenGenerator();
        new InvariantWatcher(gen);
        while(true)
            gen.next();
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java 线程测试框架

标签:java   线程   测试   

原文地址:http://blog.csdn.net/lb_383691051/article/details/47814493

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!