今天分配到了一个任务,要求获取到指定年份和期数往前推几十期的期数和年份,比如,目前开奖年份是2017年期数是45期,要求获取最近50期的年份和期数。代码如下
/// <summary>
/// 往前推算期数和年份
/// </summary>
/// <param name="year">结束年份</param>
/// <param name="qs">结束期数</param>
/// <param name="total_qs">总期数</param>
/// <returns></returns>
public Dictionary<string,int> GetForwardYearAndQS(int year,int qs,int total_qs)
{
int start_year = year;
int start_qs = 0;
while(1 == 1)
{
//如果今年的期数减去总期数大于零,则跳出循环
if(qs - total_qs >= 0)
{
start_qs = qs - total_qs + 1;
break;
}
else
{
//如果不是,则用前几年的期数补上去
--start_year;
total_qs = (total_qs - qs);
qs = this.GetMaxQS(start_year);
}
}
Dictionary<string, int> dict = new Dictionary<string, int>();
dict["start_year"] = start_year;
dict["start_qs"] = start_qs;
return dict;
}
这时就需要进行测试了,以前博主都是,把代码放到index页面的Page_Load方法中去的,可这样子既不正规,测试代码也不方便保存。于是就想起了用单元测试来试试看。
博主用的vs2015,在解决方案右击-添加-新建项目-单元测试项目,给测试项目起好名字后,右击测试项目-添加-新建项-单元测试,添加单元测试类,代码如下:
[TestClass]
public class BLLTest
{
[TestMethod]
public void TestMethod1()
{
BLL.zcp_lottery_record bll_record = new BLL.zcp_lottery_record();
int end_year = 2017;
int end_qs = 44;
int total_qs = 46;
Dictionary<string, int> expected = new Dictionary<string, int>();
expected["start_year"] = 2016;
expected["start_qs"] = 151;
Dictionary<string, int> actual = bll_record.GetForwardYearAndQS(end_year, end_qs, total_qs);
Assert.AreEqual(expected["start_year"], actual["start_year"]);
Assert.AreEqual(expected["start_qs"], actual["start_qs"]);
}
}
注意,这里的expected是你希望得到的目标结果,actual是实际结果,需要比较是否相等。
可是运行时,总是在
bll_record.GetForwardYearAndQS(end_year, end_qs, total_qs);
的那一行报错,提示空指针异常,后来调试跟踪后发现是这里的问题:
public static string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
原来是因为单元项目中没有web.config文件,才导致了数据库连接字符串连不上去。于是我就把web项目中的web.config文件复制过来。可问题依旧存在,这就只好在网上寻求解决方法了,查了半天终于找到一个解决方法:在项目中新建app.config文件。这样就能读取到
数据库连接字符串了,因为web.config文件只能在web项目中读取,无法在测试项目中读取。