1.6.4 单元测试
开发完视频监控模块后,为了保证程序正常运行,一定要对其进行单元测试。单元测试在程序开发中非常重要,只有通过单元测试才能发现模块中的不足之处,从而及时地弥补程序中出现的错误。下面对视频监控模块中容易出现的错误进行分析。
实现视频监控系统中的云台控制和方向控制功能时,如果直接在“聚焦+”、“聚焦-”、“对焦+”、“对焦-”、“光圈+”、“光圈-”、“雨刷+”、“雨刷-”、“上”、“下”、“左”和“右”按钮的Click事件下编写代码,则运行程序时,例如单击“上”按钮,则云台一直向上转,但实际情况是:只有在用户按下“上”按钮时,云台才向上转,而当用户在“上”按钮上释放鼠标时,则云台停止转动。经过仔细分析,发现实现云台控制和方向控制功能的代码应该在各个按钮的MouseDown事件下编写,而停止云台转动的代码则应该在各个按钮的MouseUp事件下编写。
1.7 监控管理模块设计
1.7.1 监控管理模块概述
监控管理模块主要用来对系统登录用户进行管理,通过此模块,可以添加、修改和删除用户信息。监控管理模块的运行结果如图1.18所示。
1.7.2 监控管理模块技术分析
监控管理模块实现时,主要用到了ADO.NET技术操作数据库,下面进行详细介绍。
使用ADO.NET技术操作数据库时,主要用到了Connection、Command、DataAdapter和DataSet 4个对象。其中,Connection对象主要负责连接数据库,Command对象主要负责生成并执行SQL语句, DataAdapter对象主要负责在Command对象执行完SQL语句后生成并填充DataSet和DataTable,而DataSet对象主要负责存取和更新数据。
例如,下面代码使用ADO.NET技术向Access 2003数据库中添加信息,并将数据库中最新的所有数据显示在ListView控件中。
string strDPath = Application.StartupPath;
string strDataSource = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ strDPath.Substring(0, strDPath.LastIndexOf("\\")).Substring(0, strDPath.Substring(0, strDPath.LastIndexOf("\\")). LastIndexOf("\\")) + "\\DataBase\\db_VWMS.mdb";
OleDbConnection oledbcon = new OleDbConnection(strDataSource);
OleDbCommand oledbcom= new OleDbCommand("insert into tb_admin (name,pwd) values('" + txtName.Text + "','" + txtPwd.Text + "')", oledbcon);
oledbcon.Open();
oledbcom.ExecuteNonQuery();
oledbcon.Close();
OleDbDataAdapter oledbda = new OleDbDataAdapter(strCon, oledbcon);
DataSet ds = new DataSet();
oledbda.Fill(ds, tbname);
foreach (DataRow dr in ds.Tables[0].Rows)
{
ListViewItem lvItem = new ListViewItem(dr[0].ToString(), 0);
lvItem.SubItems.Add(dr[0].ToString());
lview.Items.Add(lvItem);
}
1.7.3 监控管理模块实现过程
本模块使用的数据表:tb_admin
监控管理模块的具体实现步骤如下:
(1)新建一个Windows窗体,命名为frmSetMonitor.cs,主要用于实现系统用户的管理功能。该窗体用到的主要控件如表1.17示。
(2)frmSetMonitor.cs代码文件中,实例化公共类DataOperate的一个对象,用来调用其中的方法,然后实例化一个DataSet对象,用来作为数据集。关键代码如下:
例程29 代码位置:光盘\TM\01\VWMS\VWMS\frmSetMonitor.cs
DataOperate dataoperate = new DataOperate();
DataSet ds;
frmSetMonitor.cs代码文件中自定义了一个lviewBind方法,该方法用来对ListView控件进行数据绑定,以显示数据库中已经存在的用户。lviewBind方法实现代码如下:
例程30 代码位置:光盘\TM\01\VWMS\VWMS\frmSetMonitor.cs
public void lviewBind()
{
lview.Items.Clear();
ds = dataoperate.getDs("select name from tb_admin", "tb_admin");
u foreach (DataRow dr in ds.Tables[0].Rows)
{
v ListViewItem lvItem = new ListViewItem(dr[0].ToString(), 0);
w lvItem.SubItems.Add(dr[0].ToString());
x lview.Items.Add(lvItem);
}
}
U 代码贴士
u DataRow:该类表示DataTable中的一行数据。
v ListViewItem:该成员表示ListView控件中的项。
w SubItems:该属性用来获取包含该项的所有子项的集合。
x Add():该方法用来向ListView控件中添加项。
frmSetMonitor窗体加载时,调用自定义方法lviewBind()对ListView控件进行数据绑定,显示数据库中已经存在的用户。frmSetMonitor窗体的Load事件的代码如下:
例程31 代码位置:光盘\TM\01\VWMS\VWMS\frmSetMonitor.cs
private void frmSetMonitor_Load(object sender, EventArgs e)
{
lviewBind();
}