美文网首页
测试驱动开发

测试驱动开发

作者: 追风z | 来源:发表于2020-10-04 15:54 被阅读0次

1.概念

什么是测试

在学习什么是“测试驱动开发”前,我们先看看什么是“测试”。因为连起来就可能不好理解,就和上学的时候,一个很长的句子,可以分成几段,单独理解是一个意思;例如:什么是笔记本电脑,我们拆分为“什么是电脑”,什么是“笔记本”来理解。

为什么要有代码测试

目的是保证代码质量。

防止重构时引入了Bug。

替代人工完成重复的工作。

什么是测试驱动开发

测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。

好处

能最大程度保证代码的质量;同时在写测试的时候,也能有助于我们理清思路,找到最好的实现方法。

坏处

会加工作量;不是所有人都喜欢这种开发模式;需要团队有一个很高的水准。

2.单元测试和UI单元测试

Android中的测试驱动开发
主要分为两类,一类是与UI无关的测试,通常称为“单元测试”,剩下的就是与UI相关的测试。

单元测试 (与UI无关,也就是说可以在电脑上测试,也可以在android上测试)
一般是测试和Android无关的功能,例如:手机号格式判断,时间日期格式化;这类代码直接在电脑测试,不用运行到手机;同一种语言,测试方法一样;例如:用Java写的手机号格式判断代码,可以用到Android项目,也可以用到Java项目中。

UI单元测试
这个就是和平台有关的,例如:要测试按钮的点击事件,这样的代码,只能运行到Android平台。

区别

测试方法,使用的测试接口不一样;运行的平台也不一样。

3.一般步骤

1.创建被测试文件

2.定义被测试方法
这2步就是:创建被测试文件类在里面添加 测试方法

3.创建测试相关文件

4.添加测试代码

5.确认测试失败
后面3步:命名为测试的文件后面加Test,比如被测试文件StringUtil, 那么测试文件为StringUtilTest,
最后在测试方法执行测试。

例如:

被测试文件StringUtil

/**
 * 字符串工具类
 * 注意:这个和StringUtils的区别,StringUtils是导入依赖commons-lang3 包中的类
 */
public class StringUtil {

    /**
     * 是否是手机号(判断手机号格式是否正确)
     *
     * @param value Value
     * @return 返回是否符合手机号  默认返回false
     */
    public static boolean isPhone(String value) {
        //看传入的值和正则表达式,是否匹配的上,如果可以的话,就返回true,否则false
        return false//这里返回false,不管外面传入什么值,这里都是false,那么判断是true的时候肯定是不通过的
        //return value.matches(REGEX_PHONE);//这里使用正则表示匹配
    }
}

测试文件 StringUtilTest

public class StringUtilTest {
    /**
     * 测试是否是手机号
     */
    @Test
    public void testIsPhone() {
        //这是一个正确的手机号格式
        //所以用断言判断结果为true
        //只有结果为true才表示测试通过
        //也就表示我们的代码没问题

        //这里的assert其实是junit中的
        assertTrue(StringUtil.isPhone("13141111111"));

        //这是一个错误的手机号格式
        //所以用断言判断结果为false
        assertFalse(StringUtil.isPhone("ixuea"));

    }
}

//用到的匹配手机号的正则表达式

 /**
     * 手机号正则表达式
     * 移动:134 135 136 137 138 139 147 150 151 152 157 158 159 178 182 183 184 187 188 198
     * 联通:130 131 132 145 155 156 166 171 175 176 185 186
     * 电信:133 149 153 173 177 180 181 189 199
     * 虚拟运营商: 170
     * <p>
     * ^:匹配一行的开头
     * $:匹配一行的结尾
     * <p>
     * \\d{8}$:匹配后面8位数字
     */
    public static final String REGEX_PHONE = "^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$";

总结:

单元测试
总的来说:这个类 方法中的判断,在我们的测试文件通过以后,才能难道功能代码使用,这样可以减少出错。

单元测试实例:

文件大小格式化

FileUtil 被测试类

/**
 * 文件工具类
 */
public class FileUtil {
    /**
     * 文件大小格式化
     *
     * @param value 文件大小;单位byte
     * @return 格式化的文件大小;例如:1.22M
     * K M G 统一为大写 防止出错
     */
    public static String formatFileSize(long value) {
        if (value > 0) {
            double size = (double) value;//记得要先转换成double类型的
            double kiloByte = size / 1024;
            if (kiloByte < 1 && kiloByte > 0) {//kiloByte > 0有这个
                //不足1k
//                return size + "Byte";//不能用这个,用这个会报错
                return String.format("%.2fByte", size);
            }
            //%.2f :%.2f自动四舍五入(保留2位小数并四舍五入)
            double megaByte = kiloByte / 1024;
            if (megaByte < 1) {
                //不足1M(注意:不足1M,用的是kiloByte)
                return String.format("%.2fK", kiloByte);
            }

            double gigaByte = megaByte / 1024;
            if (gigaByte < 1) {
                //不足1G,用的是M
                return String.format("%.2fM", megaByte);
            }

            double teraByte = gigaByte / 1024;
            if (teraByte < 1) {
                //不足1T
                return String.format("%.2fG", gigaByte);
            }

        }
        return "1k";
    }
}

测试工具类

/**
 * 测试文件工具类
 */
public class FileUtilTest {
    /**
     * 测试文件大小格式化
     * K M G 统一为大写 防止出错
     */
    @Test
    public void testFormatFileSize() {
        //第一个参数等于第二个参数
        assertEquals(FileUtil.formatFileSize(1), "1.00Byte");

        //第一个参数等于第二个参数
        //为什么不等于1.23呢?
        //其实是因为单位换算的时候除以的是1024
        //1234/1024=1.205078125
        //可以看到格式化的时候四舍五入了
        assertEquals(FileUtil.formatFileSize(1234), "1.21K");

        //第一个参数不等于第二个参数
        assertNotEquals(FileUtil.formatFileSize(1234), "1.23K");
    }

}

相关文章

网友评论

      本文标题:测试驱动开发

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