测试驱动开发实践——重构篇

发表于:2009-06-26来源:作者:点击数: 标签:重构开发实践驱动
前一篇文章《 测试驱动开发 实践-入门篇》我们我们讲了一些基本的测试驱动开发流程: 1、写 单元测试 使他亮红灯 2、写代码使测试变成绿灯 3、重构代码 接下来我们需要开始重构了,大家有可能会问,为什么需要重构,什么时候开始重构。 对与为什么需要重构,
前一篇文章《测试驱动开发实践-入门篇》我们我们讲了一些基本的测试驱动开发流程:

  1、写单元测试使他亮红灯

  2、写代码使测试变成绿灯

  3、重构代码

  接下来我们需要开始重构了,大家有可能会问,为什么需要重构,什么时候开始重构。

  对与为什么需要重构,其实就是为了使代码结构清晰,去除一些重复的代码,比如我们执行sql语句操作,我们起初这样写:

Code
 1private connStr="server=.;database=TestDB;uid=sa;pwd=123"
 2public int Add(string loginName)
 3{
 4    int count = 0;
 5    using (SqlConnection conn = new SqlConnection(connStr))
 6    {
 7        conn.Open();
 8        SqlCommand cmd = new SqlCommand("insert(loginName) value('" + loginName + "')", conn);
 9        count = cmd.ExecuteNonQuery();
10        cmd.Dispose();
11        conn.Close();
12    }
13    return count;
14}
15
16public int Delete(string loginName)
17{
18    int count = 0;
19    using (SqlConnection conn = new SqlConnection(connStr))
20    {
21        conn.Open();
22        SqlCommand cmd = new SqlCommand("delete from LoginUsers where loginName='" + loginName + "'", conn);
23        count = cmd.ExecuteNonQuery();
24        cmd.Dispose();
25        conn.Close();
26    }
27    return count;
28}

  我们发现这里除了sql语句不一样之外,其他都是一样的,那我们就可以这样重构:

 1private int ExecuteSql(string sql)
 2{
 3    int count = 0;
 4    using (SqlConnection conn = new SqlConnection(connStr))
 5    {
 6        conn.Open();
 7        SqlCommand cmd = new SqlCommand(sql, conn);
 8        count = cmd.ExecuteNonQuery();
 9        cmd.Dispose();
10        conn.Close();
11    }
12    return count;
13}
14public int Add(string loginName)
15{
16    return ExecuteSql("insert(loginName) value('" + loginName + "')");
17}
18public int Delete(string loginName)
19{
20    return ExecuteSql("delete from LoginUsers where loginName='" + loginName + "'");
21}

原文转自:http://www.ltesting.net