c#单元测试

数据库单元测试

1.数据库设计

Person:Id(int,主键);UserName;PassWord;Age

2.新建一个项目

2.1.定义Person类

 public class Person
    {
        private int id;
        private string userName;
        private string passWorld;
        private int age;
        public int Id
        {
            get { return id; }
            set { id = value; }
        }


        public string UserName
        {
            get { return userName; }
            set { userName = value; }
        }

        public string PassWorld
        {
            get { return passWorld; }
            set { passWorld = value; }
        }

        public int Age
        {
            get { return age; }
            set { age = value; }
        }
    }

2.2.定义连接数据库类

 public class Connection
    {
        public static SqlConnection GetConnection()
        {
            string connStr = "server=localhost;uid=sa;pwd=beyond;database=test";
            SqlConnection conn = new SqlConnection(connStr);
            try
            {
                conn.Open();
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            return conn;
        }
    }

2.3.定义功能函数类DBPerson,起功能函数为增删查改

 public class DBPerson
    {
        public void InsertPerson(Person p)
        {
            string sql = "insert into Person (UserName,PassWord,Age) values (@userName,@passWord,@age)";
            SqlConnection conn = Connection.GetConnection();
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add(new SqlParameter("@userName", SqlDbType.VarChar));
            cmd.Parameters.Add(new SqlParameter("@passWord", SqlDbType.VarChar));
            cmd.Parameters.Add(new SqlParameter("@age", SqlDbType.Int));

            cmd.Parameters["@userName"].Value = p.UserName;
            cmd.Parameters["@passWord"].Value = p.PassWorld;
            cmd.Parameters["@age"].Value = p.Age;
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                conn.Close();
            }
        }

        public void Updata(Person p)
        {
            string sql = "update Person set UserName=@userName,PassWorld=@passWord,Age=@age where Id=@id";
            SqlConnection conn = Connection.GetConnection();
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add(new SqlParameter("@userName", SqlDbType.VarChar));
            cmd.Parameters.Add(new SqlParameter("@passWord", SqlDbType.VarChar));
            cmd.Parameters.Add(new SqlParameter("@age", SqlDbType.Int));
            cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.Int));

            cmd.Parameters["@userName"].Value = p.UserName;
            cmd.Parameters["@passWord"].Value = p.PassWorld;
            cmd.Parameters["@age"].Value = p.Age;
            cmd.Parameters["@id"].Value = p.Id;
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                conn.Close();
            }
        }
        public Person GetPersonByID(int id)
        {
            string sql = "select * from Person where Id=@id";
            SqlConnection conn = Connection.GetConnection();
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.Int));

            cmd.Parameters["@id"].Value = id;
            SqlDataReader reader = cmd.ExecuteReader();

            Person p = null;
            if (reader.Read())
            {
                p = new Person();
                p.Id = id;
                p.UserName = reader["UserName"].ToString();
                p.PassWorld = reader["PassWord"].ToString();
                p.Age = Convert.ToInt32(reader["Age"]);
            }
            reader.Close();
            conn.Close();
            return p;

        }

        public void DeleteById(int id)
        {
            string sql = "delete from Person where Id=@id";
            SqlConnection conn = Connection.GetConnection();
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.Int));
            cmd.Parameters["@id"].Value = id;
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                conn.Close();
            }
        }

    }

2.4.定义测试类

[TestFixture]
    public class TestDBPerson
    {
        private DBPerson dbPerson;
       
        [TestFixtureSetUp]
        public void Init()
        {
           dbPerson = new DBPerson();
        }
        [Test]
        public void TestInsert()
        {
            Person p = new Person();
            p.UserName = "beyond";
            p.PassWorld = "123456";
            p.Age = 25;

            dbPerson.InsertPerson(p);

            int maxId = this.GetMaxId();

            p.Id = maxId;

            Person p1 = new Person();
            p1 = dbPerson.GetPersonByID(maxId);

           
        }

        private void Compare(Person p,Person p1)
        {
            Assert.AreEqual(p.Id, p1.Id);
            Assert.AreEqual(p.UserName, p1.UserName);
            Assert.AreEqual(p.PassWorld, p1.PassWorld);
            Assert.AreEqual(p.Age, p1.Age);
        }

        private int GetMaxId()
        {
            string sql = "select max(Id) as maxID from Person";
            SqlConnection conn = Connection.GetConnection();
            SqlCommand cmd = new SqlCommand(sql, conn);
            SqlDataReader reader = cmd.ExecuteReader();
            int maxId = 0;
            if (reader.Read())
            {
                maxId = Convert.ToInt32(reader["maxID"]);
            }
            reader.Close();
            conn.Close();

            return maxId;
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整的中文版《单元测试之道C#版》。单元测试不但会使你的工作完成得更轻松,而且会令你的设计变得更好,甚至大大减少你花在调试上面的时间。 在我们上面的小故事里面,Pat 因为假设底层的代码是正确无误的而卷入麻烦之中,先是高层代码中使用了底层代码;然后这些高层代码又被更高层的代码所使用,如此往复。在对这些代码的行为没有任何信心的前提下,Pat 等于是在假设上面用竖立卡片堆砌了一间房子——只要将下面卡片轻轻移动,整间房子就会轰然倒塌。 当基本的底层代码不再可靠时,那么必需的改动就无法只局限在底层。虽然你可以修正底层的问题,但是这些对底层代码的修改必然会影响到高层代码,于是高层代码也连带地需要修改;以此递推,就很可能会动到更高层的代码。于是,一个对底层代码的修正,可能会导致对几乎所有代码的一连串改动,从而使修改越来越多,也越来越复杂。于是,整间由卡片堆成的房子就由此倒塌,从而使整个项目也以失败告终。 Pat 总是说:“这怎么可能呢?”或者“我实在想不明白为什么会这样”。如果你发现自己有时候也会有这种想法,那么这通常是你对自己的代码还缺乏足够信心的表现——你并不能确认哪些是工作正常的而哪些不是。 为了获得Dale 所具有的那种对代码的信心,你需要“询问”代码究竟做了什么,并检查所产生的结果是否确实和你所期望的一致。 这个简单的想法描述了单元测试的核心内涵:这个简单有效的技术就是为了令代码变得更加完美。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值