可测试性代码层面描述

可测试性战术描述:

可测试性战术的目标是允许在完成软件开发的一个增量后,轻松地对软件进行测试,测试的目标是发现错误。

具有可测试性的代码有什么特点?

  1. 控制性。 

  控制性是指测试者给在被测试的软件提供固定的输入数据的方便程度。换句话说就是软件本身接受定义明确的参数,并且这些参数可由测试者灵活的传入,软件在接受到这些参数后通过一系列运算返回固定的结果。任何软件都应该清楚的表明自己需要什么参数,以及将会生成什么返回值。此外任何软件都应该应该抽象它的依赖,譬如参数或底层模块,并为外部调用者提供随意注入的方式。当然软件代码本身应该清晰,整洁,目标明确.

   2.可见性。 

  可见性是指测试者观察正在测试的软件的当前状态以及它所产生的任何输出的能力。换句话说就是软件应该将内部运算的状态(一般是指错误状态)和输出结果清晰明确的告知测试者。可见性一般都是通过方法执行后验证后置条件完成。验证后置条件与契约式设计有关。所谓的契约式设计,是指把组件之间的交互描述成契约,权利和义务得到明确的表达和强制实施。在.net环境下,可以通过.net Framework4新增的Code Contracts库创建软件契约。 

   3.简约性。

  一般而言,简约性对任何系统在任何情况下都是一个正面的属性,测试毫无疑问也不例外。简单和极其内聚的组件非常适合测试,因为他们暴露出来的方法少,需要的测试也就少,而需要的测试越少,就越能做得可靠,快速。

可测试性战术分类图:

测试可见性:

爬取数据时,有时会出现很多特例的错误,拿爬取热词解释为例,有个别的热词在百度词条上就没有解释,还有个别热词的头条解释部门的html代码和其他的不一样,因此,我在爬取日此解释时用if语句进行了条件测试,当原本的爬取语句得不到你内容时,改为爬取特例热词html数据的语句,如果二者爬取不到数据,则控制台打印未找到解释并将该热词的解释返回为未找到解释。

r = requests.get(url,headers = headers)
    html = r.content.decode("utf-8")
    strhtml = etree.HTML(html)
    content1 = strhtml.xpath('//div[@class="lemma-summary"]')
    if len(content1)==0:
        content1 =strhtml.xpath('string(//ul[@class="custom_dot  para-list list-paddingleft-1"])')
        if len(content1)==0:
            print('未找到解释')
            content1 = '未找到解释'
            return content1
    else:
        content2 =content1[0].xpath ('string(.)').replace('&nbsp','').replace('
','')
        return content2
        print(content2)

接口分离:

ajax请求接口时可能会出现请求地址错误或者请求失败的情况,导致不能正确的返回数据,因此当ajax请求失败,ajax提示错误信息。如果当请求路径成功时,servlet会在控制台有提示,证明是没返回数据,如果控制台没有提示,则证明请求路径出错。

$.ajax({
            type :"POST",
            url : context+"/countServlet?method=listword",
            dataType :"json",           
            async : false,
            global :false,
            success : function(json) {
                content="";
                for(var j=0;j<json[0].length;j++){
                    content+="<div class='layui-colla-item'><h2 class='layui-colla-title'>"+json[0][j].name+"</h2>";
                    content+="<div class='layui-colla-content'><div class='layui-collapse' lay-accordion=''>";
                    for(var i=0;i<json[1].length;i++){
                        content+="<div class='layui-colla-item'><h2 class='layui-colla-title'>"+json[j+1][i].name+"</h2>";
                        content+="<div class='layui-colla-content'><p>"+json[j+1][i].wordexplain+"</p></div></div>";
                    }
                    content+="</div></div></div>";
                }
                $(".jieshi").html(content);
            },
            error: function(message){
                alert("请求失败");
            }
        });

监视:

利用try catch进行监视,当数据请求失败,抛出异常。

try {
    words = dao.listwords(types.get(i).getName());
    total.add(JSONArray.fromObject(words));
} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

 对于项目的运行情况,谷歌浏览器的事件监视器,也会帮助我们更好的进行监视。

原文地址:https://www.cnblogs.com/yuanxiaochou/p/12400600.html