美文网首页
Junit学习

Junit学习

作者: 四喜汤圆 | 来源:发表于2018-06-03 19:39 被阅读11次

    本文是对唯鹿_Android单元测试(一):JUnit框架的使用的学习笔记

    image.png

    需要进行测试的工具类

    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;
    
    /**
     * <pre>
     *     author : 杨丽金
     *     time   : 2018/06/03
     *     desc   : 日期操作工具类
     * </pre>
     */
    public class DateUtil {
        /*
        英文全称 如:2017-11-01 22:11:00
         */
        public static String FORMAT_YMDHMS = "yyyy-MM-dd HH:mm:ss";
    
        /**
         * 输入需要转换的时间,如("2017-11-01 22:11:00"),返回时间戳
         *
         * @param time
         * @return:时间戳
         */
        public static long dateToStamp(String time) throws ParseException {
            SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_YMDHMS, Locale.CHINA);
            Date date = sdf.parse(time);
            return date.getTime();
        }
    
        /**
         * 时间戳转化为时间如("2017-11-01 22:11:00")
         *
         * @param lt
         * @return
         */
        public static String stampToDate(long lt) {
            SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_YMDHMS, Locale.CHINA);
            Date date = new Date(lt);
            return sdf.format(date);
        }
    }
    
    

    1.用单个数据进行测试、测试方法是否抛出指定的异常

    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.text.ParseException;
    
    import static org.junit.Assert.assertEquals;
    
    /**
     * <pre>
     *     author : 杨丽金
     *     time   : 2018/06/03
     *     desc   :
     * </pre>
     */
    
    public class DateUtilTest {
    
        private String time = "2017-10-15 16:00:02";
        private long stamp = 1508054402000L;
    
        @Before
        public void setUp() throws Exception {
            System.out.println("测试开始");
        }
    
        /*
         * 测试方法抛出异常
         */
        @Test(expected = ParseException.class)
        public void dateToStamp() throws Exception {
            assertEquals(1508054402000L, DateUtil.dateToStamp("2018-06-03"));
        }
    
        /*
         * 用单个数据测试
         */
        @Test
        public void dateToStamp2() throws Exception {
            assertEquals(stamp, DateUtil.dateToStamp(time));
        }
    
        /*
         * 用单个数据测试
         */
        @Test
        public void stampToDate() throws Exception {
            assertEquals(time, DateUtil.stampToDate(stamp));
        }
    
        @After
        public void tearDown() throws Exception {
            System.out.println("测试结束");
        }
    }
    

    2.用数据集进行测试

    • 类声明处用注解 @Runwith(Parameterized.class)


      类声明处用注解 .png
    • 在类内部写public static的方法,并用注解@Parameterized.Parameters标注 image.png
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.junit.runners.Parameterized;
    
    import java.text.ParseException;
    import java.util.Arrays;
    import java.util.Collection;
    
    /**
     * <pre>
     *     author : 杨丽金
     *     time   : 2018/06/03
     *     desc   :
     * </pre>
     */
    @RunWith(Parameterized.class)
    public class DateFormatTest {
    
        private String time;
        public DateFormatTest(String time) {
            this.time = time;
        }
        /*
         * 用数据集合测试
         */
        @Test(expected= ParseException.class)
        public void dateToStamp() throws Exception {
            DateUtil.dateToStamp(time);
        }
    
        @Parameterized.Parameters
        public static Collection primNumbers(){
            return Arrays.asList(new String[]{
                    "2017-05-12",
                    "2018-04-09 11:34:23",
                    "2017年10月4日 16时34分56秒"
            });
        }
    }
    
    

    3.指定Rule(将公共操作抽象出来)

    • 创建类MyRule实现TestRule接口,重写其中的抽象方法apply(),在其中指定自己的规则
    • 在测试类中创建实例变量,并用Rule注解标注
    @Rule
    public MyRule rule=new MyRule();
    

    MyRule.java

    import org.junit.rules.TestRule;
    import org.junit.runner.Description;
    import org.junit.runners.model.Statement;
    
    /**
     * <pre>
     *     author : 杨丽金
     *     time   : 2018/06/03
     *     desc   :
     * </pre>
     */
    public class MyRule implements TestRule {
        @Override
        public Statement apply(final Statement base, final Description description) {
            return new Statement() {
                @Override
                public void evaluate() throws Throwable {
    
                    // 相当于在@Before中调用
                    String methodName=description.getMethodName();
                    System.out.println(methodName+"测试开始");
                    base.evaluate();
                    // 相当于在@After中调用
                    System.out.println(methodName + "测试结束");
    
                }
            };
        }
    }
    
    
    import org.junit.Rule;
    import org.junit.Test;
    
    import java.text.ParseException;
    
    import static org.junit.Assert.assertEquals;
    
    /**
     * <pre>
     *     author : 杨丽金
     *     time   : 2018/06/03
     *     desc   :
     * </pre>
     */
    
    public class DateUtilTest {
    
        @Rule
        public MyRule rule = new MyRule();
    
        private String time = "2017-10-15 16:00:02";
        private long stamp = 1508054402000L;
    
      
        /*
         * 用单个数据测试
         */
        @Test
        public void dateToStamp2() throws Exception {
            assertEquals(stamp, DateUtil.dateToStamp(time));
        }
    
    }
    

    参考文献

    唯鹿_Android单元测试(一):JUnit框架的使用

    相关文章

      网友评论

          本文标题:Junit学习

          本文链接:https://www.haomeiwen.com/subject/eufssftx.html