自己写一个JUnit3-day2

day2
 
一直使用javac然后再java终归是不方便,IDEA的存在就是为了解放我们的双手。
 
IDEA菜单栏Run——Edit Configurations,点击左上角的+,在弹出层中选择Application,填写完成点击OK。然后点击菜单栏Run——Run 'MyJUnit3' 即可。
 
 
JUnit支持setUp()和tearDown()方法,但是在JUnit3中,每执行一个test方法,就会把setUp()和tearDown()执行一遍。JUnit4中则一个类中只会执行一次。
 
新建抽象类MyTestCase,两个方法,setUp()和tearDown(),方法体为空
public abstract class MyTestCase {
    public void setUp() {
    }
 
    public void tearDown() {
    }
}

 

新建JUnit3Demo,继承MyTestCase,并重写setUp()和tearDown()
public class JUnit3Demo extends MyTestCase {
    @Override
    public void setUp() {
        System.out.println("setUp");
    }
 
    @Override
    public void tearDown() {
        System.out.println("tearDown");
    }
    
    public void testAdd1(){
        System.out.println("testAdd1====");
    }
    public void testAdd2(){
        System.out.println("testAdd2====");
    }
}

 

新建MyUnit3
public class MyUnit3 {
 
    public static void main(String[] args) throws Exception {
        Class c = Class.forName(args[0]);//args[0]获取运行参数,假定第一个运行参数即为需要执行的测试类。并加载该类
        //Object o = c.newInstance();
        MyTestCase o = (MyTestCase) c.newInstance();
        Method[] methods = c.getMethods();//获取所有方法,然后遍历得到符合要求的方法,通过invoke()执行
        for (Method m : methods) {
            if (isTestMethod(m)) {
                o.setUp(); //执行setUp()
                m.invoke(o);
                o.tearDown(); //执行tearDown()
            }
        }
    }
 
    private static boolean isTestMethod(Method m) {
        String methodName = m.getName();
        int modifier = m.getModifiers();
        Class returnType = m.getReturnType();
 
        return methodName.startsWith("test") && 1 == modifier && returnType.equals(Void.TYPE);
    }
}

 

运行 MyUnit3 ,com.wangc.day2.JUnit3Demo作为运行参数
 
 
基本上算是实现了在test前执行setUp在test后执行tearDown这个需求了,而且,一不小心使用了一种设计模式——模板方法模式。
 
 

突然发现,牛逼又吹早了,应该先把文章都写完了再发布。这才刚刚开头就准备放弃了。
前两篇都是等下一篇写好了,才把这一篇发布,day2已经写完好久了,在笔记里躺了10天了,day3还没开始写,周末只想躺着。。。

 

 

 
 
 
 
 
 
 
 
posted @ 2021-03-15 16:04  乌鸦不会飞  阅读(56)  评论(0)    收藏  举报