研究了一周的单元测试,现在勉强算是摸到了门槛,现整理笔记如下:
项目架构是简单的工厂模式,对应代码为:
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); } } }
时间: 2024-11-05 02:58:26