自己打造一个单元测试框架

发表于:2014-1-07 11:52

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:pclion    来源:51Testing软件测试网采编

分享:
  上面中命名空间ftmark是被测试的项目命名空间,pclion.UnitTest是本单元测试框架的命名空间,pclion.IDB是本人的一个通用数据库访问接口。
  接下来,在Web项目上创建新目录test,在目录test中添加新项-WEB窗体,创建一个名叫dbintfTest的asp.net网页,在网页的<div>中放置一个Literal控件,在代码Page_Load()编写如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using pclion.IDB;
using ftmark;
using dbintfTest;
using pclion.UnitTest;
public partial class test_dbintfTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DBIntfTest test = new DBIntfTest();
Assert.Init();
try
{
Literal1.Text += Assert.RunTestHtml("login", test.LoginTest);
Literal1.Text += "<br>" + Assert.RunTestHtml("UserGroup",test.UserGroupTest);
}
finally
{
Literal1.Text += "<br>" + Assert.RunTestHtml("LogoutTest", test.LogoutTest);
}
Literal1.Text += "<br>" + Assert.EndofAll();
}
}
  最后,右击该页-在浏览器中查看,就可运行该测试,并在浏览器上看到测试结果。
  上例中“LogoutTest"测试放在try-finally块中,是因为这个网站系统的登录方式是禁止一个账号多次登录的,只在有登录账号退出后才允许再次登录,所以每个Login测试都必须确保运行一个Logout。
  测试框架的代码如下:
using System;
using System.Collections.Generic;
using System.Web;
namespace pclion.UnitTest
{
public class Assert
{
public static string name;
public static string msg;
private static bool success;
private static int total;
private static int passed;
public delegate void TestFunc();
#region 自定义测试框架基础代码
public static void Init()
{
total = 0;
passed = 0;
}
private static void BeginTest(string _name)
{
name = _name;
success = true;
msg = string.Empty;
}
private static string EndTest()
{
total++;
if (success) passed++;
string s = string.Format("[{0}][{1}] - ", total, name);
if (success) s += "ok";
else s += "Failure: " + msg;
return s;
}
public static string EndofAll()
{
string s;
if (total == passed) s = "all testes passed.";
else s = string.Format("[{0}] testes failure.", total - passed);
return s;
}
/// <summary>
/// 运行一个测试
/// </summary>
/// <param name="name">测试的显示名称</param>
/// <param name="func">测试的函数委托</param>
/// <returns>测试的输出</returns>
public static string RunTest(string name, TestFunc func)
{
string s;
BeginTest(name);
try
{
func();
}
catch (Exception err)
{
success = false;
msg = err.Message + "\n" + err.StackTrace;
}
s = EndTest();
return s;
}
/// <summary>
/// RunTest的HTML版本
/// </summary>
/// <param name="name"></param>
/// <param name="func"></param>
/// <returns>测试的输出的HTML编码</returns>
public static string RunTestHtml(string name, TestFunc func)
{
return System.Web.HttpUtility.HtmlEncode(RunTest(name, func));
}
#endregion
public static void AreEqual(bool expected)
{
success = success && expected;
}
public static void AreEqual<T>(T expected, T actual)
{
success = success && expected.Equals(actual);
}
}
}
22/2<12
重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号