码迷,mamicode.com
首页 > 其他好文 > 详细

单元测试之初试

时间:2016-07-18 16:47:57      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

研究了一周的单元测试,现在勉强算是摸到了门槛,现整理笔记如下:

项目架构是简单的工厂模式,对应代码为:

DAL

using System.Collections.Generic;
using MetalsExchange.IDAL;
using MetalsExchange.DBUtility;
using MetalsExchange.Model;

namespace MetalsExchange.SQLServerDAL
{
    public class Employee: IEmployee
    {
        public IList<CustomerInfo> GetCustomerList()
        {
            IList<CustomerInfo> list = new List<CustomerInfo>();
            return list;
        }
    }
}

  IDAL

using System.Collections.Generic;
using MetalsExchange.Model;

namespace MetalsExchange.IDAL
{
    public interface IEmployee
    {
        IList<CustomerInfo> GetCustomerList();
    }
}

  BLL

using System.Collections.Generic;
using MetalsExchange.Model;
using MetalsExchange.IDAL;

namespace MetalsExchange.Bll
{
    public  class EmployeeBll
    {
        public IEmployee dal = DALFactory.DataAccess.CreateEmployee();

        public IList<CustomerInfo> GetCustomerList()
        {
            return dal.GetCustomerList();
        }
    }
}

  DALFactory

using System.Configuration;
using System.Reflection;

namespace MetalsExchange.DALFactory
{
    public class DataAccess
    {
        private static  string path {
            get {
                string _path= ConfigurationManager.AppSettings["WebDAL"];
                if (_path == null)
                    _path = "MetalsExchange.SQLServerDAL";
                return _path;
            }
        }

        public static IDAL.IEmployee CreateEmployee()
        {
                string className = path + ".Employee";
                return (IDAL.IEmployee)Assembly.Load(path).CreateInstance(className);
        }
    }    
}

  最开始就卡在这里,一度以为静态方法无法单元测试,后来发现原因是因为ConfigurationManager.AppSettings["WebDAL"]取不到值,因为测试项目里面没有config文档,目前我采用了最简单的方法来解决,最好的方法是将这个方法重新封装

  单元测试

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections.Generic;
using Moq;
using MetalsExchange.IDAL;
using MetalsExchange.Model;

namespace MetalsExchange.Bll.Tests
{
    [TestClass()]
    public class EmployeeBllTests
    {
        [TestMethod()]
        public void GetCustomerListTest()
        {

            //arrange
            var mock = new Mock<IEmployee>();
            mock.Setup(customer => customer.GetCustomerList()).Returns(new List<CustomerInfo>());
            EmployeeBll employee = new EmployeeBll();

            //art
            IList<CustomerInfo> list = employee.GetCustomerList();

            mock.Verify();
            //assert

            Assert.ReferenceEquals(list, mock.Object.GetCustomerList());
        }
    }
}

  工厂类是一个静态类,其实也可以做单元测试

using Microsoft.VisualStudio.TestTools.UnitTesting;
using MetalsExchange.IDAL;

namespace MetalsExchange.DALFactory.Tests
{
    [TestClass()]
    public class DataAccessTests
    {
        [TestMethod()]
        public void CreateEmployeeTest()
        {
            IEmployee dal = DataAccess.CreateEmployee();

            Assert.IsNotNull(dal);
        }
    }
}

  

单元测试之初试

标签:

原文地址:http://www.cnblogs.com/yk411/p/5680318.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!