zoukankan      html  css  js  c++  java
  • 简单了解junit的使用

    普通使用:

    在没有用测试框架之前,我们要用一个main方法来跑代码,而有了像junit这样的测试框架后,就可以不用次次写个main方法了。

    直接上代码,注释里有说明:

    package com.stuPayment;
    
    import static org.junit.Assert.assertEquals;
    
    import org.junit.After;
    import org.junit.AfterClass;
    import org.junit.Before;
    import org.junit.BeforeClass;
    import org.junit.Ignore;
    import org.junit.Test;
    
    /**
     * 简单地演示了junit的基本用法
     * @author 85060
     *
     */
    public class MyTest {
        private static NumberTest numberTest = null;
        
        public void get3(NumberTest num) {
            num.a = num.a*num.a*num.a;
        }
        
        public void get2(NumberTest num) {
            num.a = num.a*num.a;
        }
        
        @Ignore //这个注释下的方法是会被忽略暂时不会运行的
        public void ignoreMethod() {
            System.out.println("i am ingnored");
        }
        
        @Before //这个注释是在每个测试方法之前都会跑的,也就是每个@Test的方法跑之前
        public void sayBefore() {
            System.out.println("hello i am the before");
        }
        
        @After    //这个注释是在每个测试方法之后都会跑的,也就是每个@Test的方法跑之后
        public void sayAfter() {
            System.out.println("hello i am the after");
        }
        
        @BeforeClass    //这个注释是在整个测试开始前会跑的
        public static void befC() {
            System.out.println("hello i am the before class");
            numberTest = new NumberTest(3);
        }
        
        @AfterClass    //这个注释是在整个测试结束后会跑的
        public static void aftC() {
            System.out.println("hello i am the after class and the a is "+numberTest.a+" now");
            
        }
        
        @Test
        public void test1() {
            System.out.println("i am the test1");
            get2(numberTest);
            assertEquals(9, numberTest.a);
        }
        
        @Test
        public void test2() {
            System.out.println("i am the test2");
            /*if(numberTest.a == 3) {
                
            } else if(numberTest.a == 9)*/
            get3(numberTest);
            assertEquals(729, numberTest.a);
            
        }
        
    }
    
    class NumberTest {
        int a;
        
        public NumberTest(int a) {
            this.a = a;
        }
        
    }

    运行的方法就直接run as Junit Test,运行结果:

     

    在Springboot中使用junit:

    这里只是提供一个简单的测试例子,可以用来单独测试service或者是你的dao接口。

    关于@Runwiht:

    @RunWith
    在JUnit中有很多个Runner,他们负责调用你的测试代码,每一个Runner都有各自的特殊功能,你要根据需要选择不同的Runner来运行你的测试代码。
    如果我们只是简单的做普通Java测试,不涉及Spring Web项目,你可以省略@RunWith注解,这样系统会自动使用默认Runner来运行你的代码。

    也是直接上代码,注释里面有说明:

    package com.stuPayment;
    
    import static org.junit.Assert.assertArrayEquals;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import com.stuPayment.dao.LoginMapper;
    import com.stuPayment.entiy.User;
    
    /**
     * 演示了springboot环境下的junit测试
     * @author 85060
     *
     */
    @RunWith(SpringRunner.class)    // SpringJUnit支持,由此引入Spring-Test框架支持! 
    @SpringBootTest             //提供spring环境
    public class MyTest2 {
        
        @Autowired
        private LoginMapper loginMapper;
        
        @Test
        public void testVoid() {
            Map<String, Object> user = new HashMap<>();
            user.put("userAccount", "123");
            user.put("userPassword", "123");
            List<User> userList = loginMapper.getThisUser(user);
            
            assertArrayEquals(
                    new Object[]{
                            userList.isEmpty()
                    }, new Object[]{
                            false
                    }
            );
        }
    }

    junit的参数化测试:

    其实就是,当有一个方法,要用多组参数来验证其正确性,这个时候你就可以考虑用这个@RunWith(Parameterized.class)注解

    上代码,代码里面有注解解释:

    package com.stuPayment;
    
    import static org.junit.Assert.assertTrue;
    
    import java.util.Arrays;
    import java.util.Collection;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.junit.runners.Parameterized;
    import org.junit.runners.Parameterized.Parameters;
    
    /**
     * 演示一下参数测试
     * @author 85060
     *
     */
    @RunWith(Parameterized.class)   //一定要用这个注解
    public class MyTest3 {
        private String name;
        private boolean result;
        
        /**
         * 在参数测试中只能有一个构造方法,因为参数测试是需要一个构造方法参与的
         * 这个构造方法的参数和等一下@Parameters注解的方法中的Object数组中值的顺序对应
         * @param name
         * @param result
         */
        public MyTest3(String name, boolean result) {
            this.name = name;
            this.result = result;
        }
        
        /**
         * 必须提供@Parameters方法,方法签名必须是public static Collection,不能有参数,
         * 并且collection元素必须是相同长度的数组。
         * 同事数组的长度必须与唯一的公共构造函数的参数数量相匹配。
         */
        @Parameters
        public static Collection<?> data() {
            return Arrays.asList(new Object[][]{
                {"jflksadjflkasdlkfj",false},
                {"mikjsdkalfjlksdjfmifjaslkdjf",true},
                {"mimimimisdfsadfsd",true}
            });//意思其实就是拿这些数据去用MyTest3(String name, boolean result)一直new
        }
        
        @Test    //真正测试也就是跑的那个方法,用@parameters方法返回的那些参数每组都用MyTest3(String name, bolean result)
                 //然后再跑下面这个方法。
        public void test() {
            assertTrue(name.contains("mi") == result);//看看每个用上面那些数据new的实例是否符合要求
        }
        
    }

    测试结果的效果:

     可以看到,如果有错的话会有蓝色的叉叉,然后点击这个错误,在failure trace那可以看到简单的错误说明。

  • 相关阅读:
    点赞功能实现 $(tag).css('属性', '样式')
    ul li的添加 删除 复制 clone()
    Java 面向对象之构造函数和 this 关键字
    Java 面向对象编程介绍
    Java 语言基础之数组应用
    Java 语言基础之数组常见操作
    Java 语言基础之数组(一)
    Java 语言基础之函数
    Java 语言基础之语句
    Java 语言基础之运算符
  • 原文地址:https://www.cnblogs.com/wangshen31/p/9343829.html
Copyright © 2011-2022 走看看