这是一个项目中用到的方法,不要在意方法的内容,方法是做什么的。
public class WineUrl
{
/// <summary>
/// 获取页面的url
/// </summary>
/// <param name="paraDic">参数字典</param>
/// <param name="pgid">页码</param>
/// <param name="zhanweifu">占位符键,该键的值是{0},目的是后面可以替换值</param>
/// <returns></returns>
public string GetPageUrl(Dictionary<string, string> paraDic, int pgid, string zhanweifu)
{
Dictionary<string, string> paraList = new Dictionary<string, string>(paraDic);
if (!string.IsNullOrEmpty(zhanweifu))
{
if (paraList.ContainsKey(zhanweifu))
{
paraList[zhanweifu] = "{0}";
}
else
{
paraList.Add(zhanweifu, "{0}");
}
}
string url = "/chanpin";
//先判断类型和地区,这些需要拼接url
if (paraList.ContainsKey("type"))
{
url += "/" + paraList["type"];
if (paraList.ContainsKey("city"))
{
url += "_c_" + paraList["city"];
}
}
else
{
if (paraList.ContainsKey("city"))
{
url += "/c_" + paraList["city"];
}
}
if (pgid == 0)//pgid=0是占位符,翻页使用
{
url += "/p{0}/?";
}
else if (pgid == 1)//pgid=1表示第一页,可以不用显示
{
url += "/?";
}
else if (pgid > 1)//表示正常的翻页
{
url += "/p" + pgid + "/?";
}
//其他附加参数处理
if (paraList.ContainsKey("title"))
{
url += "title=" + paraList["title"] + "&";
}
if (paraList.ContainsKey("time"))
{
url += "time=" + paraList["time"] + "&";
}
url = url.TrimEnd('?').TrimEnd('&');
return url;
}
}
创建测试项目
添加测试方法,actual 是实际运行的结果,excepted是你期望得到的结果。下面都是对上面的方法进行验证、测试的
[TestClass]
public class UnitTest1
{
public WineUrl winurl= new WineUrl();
[TestMethod]
public void AnalysisUrl_type()
{
//WineUrl winurl = new WineUrl();
Dictionary<string, string> param = new Dictionary<string, string>();
param.Add("type", "yinliao");
int pgid = 1;
string zhanweifu = "";
string actual = winurl.GetPageUrl(param, pgid, zhanweifu);
string excepted = "/chanpin/yinliao/";
Assert.AreEqual(excepted, actual, "地址解析错误");
}
[TestMethod]
public void AnalysisUrl_city()
{
//WineUrl winurl = new WineUrl();
Dictionary<string, string> param = new Dictionary<string, string>();
param.Add("city", "henan");
int pgid = 1;
string zhanweifu = "";
string actual = winurl.GetPageUrl(param, pgid, zhanweifu);
string excepted = "/chanpin/c_henan/";
Assert.AreEqual(excepted, actual, "地址解析错误");
}
[TestMethod]
public void AnalysisUrl_city_time()
{
//WineUrl winurl = new WineUrl();
Dictionary<string, string> param = new Dictionary<string, string>();
param.Add("city","henan");
param.Add("time", "10");
int pgid = 1;
string zhanweifu = "";
string actual= winurl.GetPageUrl(param,pgid,zhanweifu);
string excepted = "/chanpin/c_henan/?time=10";
Assert.AreEqual(excepted, actual,"地址解析错误");
}
[TestMethod]
public void AnalysisUrl_type_city_time()
{
//WineUrl winurl = new WineUrl();
Dictionary<string, string> param = new Dictionary<string, string>();
param.Add("type", "yinliao");
param.Add("city", "henan");
param.Add("time", "10");
int pgid = 1;
string zhanweifu = "";
string actual = winurl.GetPageUrl(param, pgid, zhanweifu);
string excepted = "/chanpin/yinliao_c_henan/?time=10";
Assert.AreEqual(excepted, actual, "地址解析错误");
}
[TestMethod]
public void AnalysisUrl_type_city_time_page()
{
//WineUrl winurl = new WineUrl();
Dictionary<string, string> param = new Dictionary<string, string>();
param.Add("type", "yinliao");
param.Add("city", "henan");
param.Add("time", "10");
int pgid = 3;
string zhanweifu = "";
string actual = winurl.GetPageUrl(param, pgid, zhanweifu);
string excepted = "/chanpin/yinliao_c_henan/p3/?time=10";
Assert.AreEqual(excepted, actual, "地址解析错误");
}
[TestMethod]
public void AnalysisUrl_type_city_time_page_title()
{
// WineUrl winurl = new WineUrl();
Dictionary<string, string> param = new Dictionary<string, string>();
param.Add("type", "yinliao");
param.Add("city", "henan");
param.Add("time", "10");
param.Add("title", "酸梅汤");
int pgid = 3;
string zhanweifu = "";
string actual = winurl.GetPageUrl(param, pgid, zhanweifu);
string excepted = "/chanpin/yinliao_c_henan/p3/?title=酸梅汤&time=10";
Assert.AreEqual(excepted, actual, "地址解析错误");
}
[TestMethod]
public void AnalysisUrl_type_city_time_page_title_zhanwei()
{
//WineUrl winurl = new WineUrl();
Dictionary<string, string> param = new Dictionary<string, string>();
param.Add("type", "yinliao");
param.Add("city", "henan");
param.Add("time", "10");
param.Add("title", "酸梅汤");
int pgid = 3;
string zhanweifu = "city";
string actual = winurl.GetPageUrl(param, pgid, zhanweifu);
string excepted = "/chanpin/yinliao_c_{0}/p3/?title=酸梅汤&time=10";
Assert.AreEqual(excepted, actual, "地址解析错误");
}
[TestMethod]
public void AnalysisUrl_type_city_time_page_title_zhanwei_2()
{
//WineUrl winurl = new WineUrl();
Dictionary<string, string> param = new Dictionary<string, string>();
param.Add("type", "yinliao");
param.Add("city", "henan");
param.Add("time", "10");
param.Add("title", "酸梅汤");
int pgid = 0;
string zhanweifu = "";
string actual = winurl.GetPageUrl(param, pgid, zhanweifu);
string excepted = "/chanpin/yinliao_c_henan/p{0}/?title=酸梅汤&time=10";
Assert.AreEqual(excepted, actual, "地址解析错误");
}
}
运行单元测试
运行结果,全部测试成功
把第一个方法的期望结果改成错误的,会有提示
此处还可以分析测试代码的覆盖率
已覆盖95.92%的代码,还有4.08%的代码没有被覆盖。下面是没有测试到的代码,因此需要进一步完善测试方法。