Moq 单元测试的意义

       单元测试是开发人员对代码逻辑进行的测试,需要写单元测试代码来实现。单元测试里面是调用函数,根据返回的结果去判断代码逻辑是否正确。通常的操作是CRUD,除了查询之外的操作都是要与数据库打交道的。比如删除记录的函数在单元测试中被调用,记录就会被删掉,而此时开发人员很有可能需要这条记录来测试自己开发的功能是否正确,这样开发和测试就发生了冲突。

       单元测试时可以使用MSTEST,通过PowerShell的脚本调用来跑的,很多团队使用自动化脚本来跑测试收集结果。数据库里的数据时刻都在变化,对于开发是很不利的,有没有一种机制能够把开发和测试分开呢,让做单元测试的时候不影响数据库。

       Moq就是这样一种机制。Moq需要一个虚拟化对象,所以,被测试的实例需要继承一个接口或者抽象类。

接口(ISqlHelper):

public interface ISqlHelper
{
    int Insert();
}
类(SqlHelper)

public class SqlHelper : ISqlHelper
    {
        public int Insert()
        {
            string connstr = @"data source=fuhui-pc\sqlexpress;Initial Catalog=WSCLMBPM;Integrated Security=True;";
            string sql = "insert into UserInfo values('wyy','1234','wyy@wicresoft.com','120');";
            SqlConnection conn = new SqlConnection(connstr);
            int result = 0;
            try
            {
                if(conn.State == ConnectionState.Closed)
                    conn.Open();
                SqlCommand cmd = new SqlCommand
                {
                    CommandType = CommandType.Text, 
                    Connection = conn, 
                    CommandText = sql
                };

                result = cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {

                Console.WriteLine(ex.Message);
                throw;
            }
            finally
            {
                if (conn.State == ConnectionState.Open)
                    conn.Close();
            }

            return result;
        }
    }
单元测试:

[TestClass]
    public class UnitTest1
    {
        private int result = 1;
        [TestMethod]
        public void TestMethod1()
        {
            var sqlHelperMock = new Mock<ISqlHelper>();
            sqlHelperMock.Setup(x => x.Insert()).Returns(1);
            Assert.AreEqual(result, sqlHelperMock.Object.Insert());
            sqlHelperMock.VerifyAll();
        }
    }
测试结果:

 

 这时候我们发现数据库中并没有真正插入数据,但是单元测试已经通过了。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值