可测试性战术

可测试性战术

可测试性战术的目标是允许在完成软件开发的一个增量后,较轻松地对软件进行测试。
主要有两类用于测试的战术:提供输入并捕获输出;内部监视。

输入/输出

有3种用于管理测试的输入和输出的战术

记录/回放
记录/回放是指捕获跨接口的信息,并将其作为测试专用软件的输入。在正常操作中跨一个接口的信息保存在某个存储库中,它代表来自一个组件的输出和传到一个组件的输入。记录该信息使得能够生成对其中一个组件的测试输入,并保存用于以后的比较的测试输出。

将接口与实现分离
将接口与实现分离允许实现的代替,以支持各种测试目的。点位实现允许在缺少被占位的组件时,对系统的剩余部分进行测试。用一个组件代替某个专门的组件能够使被代替的组件充当系统剩余部分的测试工具。

特化访问路线/接口
具有特化的测试接口允许通过测试工具并独立于其正常操作,来捕获或指定组件的变量值。

内部监视

内置监视器
组件可以维持状态、性能负载、容量、安全性或其他可通过接口访问的信息。此接口可以是该组件的一个永久接口,常见的技巧就是当监视状态被激活时记录事件。

 

(1)使用异常类检测 用户输入请求,数据库放回响应,如果有异常,控制台提示相关异常信息

创建数据库链接的代码(当连接失败时提示相关异常信息):

    public static Connection getConn () {
        Connection conn = null;
        
        try {
            Class.forName("com.mysql.jdbc.Driver");//加载驱动
            conn = DriverManager.getConnection(db_url, db_user, db_pass);
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return conn;//返回了产生的Connection对象
    }

 

(2)MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
  通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
  通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
  通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
 
MVC 分层有助于管理复杂的应用程序。面向接口编程,让应用程序的测试更加容易,比如,当测试视图模块时,可以对其进行单独的测试,不必考虑其他模块实现的内容。
  

(3)下面是用Java实现的一个监视器用来监视下载任务,利用一个监视器接口,监视下载任务的完成情况

        首先是一个IListener接口,IListener.java:

public interface IListener {

public void afterDownLoad(DownLoadEvent event);

}


        然后是实现了IListener接口的DownLoadListener.java:

public class DownLoadListener implements IListener {

@Override
public void afterDownLoad(DownLoadEvent event) {
System.out.println(event.getFileName() + " download finished");
}
}

        写一个下载事件类DownLoadEvent.java,里边有文件名称以及是否下载完成两个属性

public class DownLoadEvent {

private String fileName;
private boolean isFinish = false;

public DownLoadEvent(String fileName) {
this.fileName = fileName;
}

public String getFileName() {
return fileName;
}

public void setFileName(String fileName) {
this.fileName = fileName;
}

public boolean isFinish() {
return isFinish;
}

public void setFinish(boolean isFinish) {
this.isFinish = isFinish;
}
}


        接下来是事件发生类DownLoadFile.java,在其中的download方法中首先打印出start download,然后暂停1000ms代表下载,之后下载完成,将下载事件中的下载是否完成属性设成true,然后就会执行listerner中的afterDownLoad方法:

public class DownLoadFile {

private IListener listener;

public IListener getListener() {
return listener;
}

public void setListener(IListener listener) {
this.listener = listener;
}

public void download() throws InterruptedException {
DownLoadEvent event = new DownLoadEvent("No Man Land");

System.out.println("start download");
Thread.sleep(1000);
event.setFinish(true);

listener.afterDownLoad(event);
}
}


        最后是main方法:

public class MainTest {

public static void main(String[] args) throws InterruptedException {
DownLoadFile downloadFile = new DownLoadFile();
downloadFile.setListener(new DownLoadListener());
downloadFile.download();
}
}


运行结果如下:

(4)Windows操作系统中的任务管理器可以对各个进程的运行情况等进行监视。

 

posted on 2020-03-02 19:36  宥宁  阅读(234)  评论(0编辑  收藏  举报

导航