写给PPT用,可测试性驱动开发导向IOC的过程

本文通过一个购物车系统的例子,介绍了如何通过重构提高代码的可测试性,包括使用接口隔离、依赖注入等技巧。

可测试性驱动开发的一个不严谨例子

 

一个购物车的例子

 

public class Cart
    {
        public Logger logger = new Logger();

        public List<Product> ProductList;

        public Cart()
        {
            ProductList = new List<Product>();
        }
 
        public int GetTotalCount()
        {
            return this.ProductList.Count;
        }

        public void Add(Product product)
        {
            //小记下log
            logger.Log(string.Format("添加了一件商品"));
            //一大段逻辑
            Console.WriteLine("判断是否重复");
            Console.WriteLine("判断商品ID是不是正确"); 

            ProductList.Add(product);
        }
    }

 

logger一开始是这样的

 

public class Logger
    {
        //插入数据库
        public void Log(string message)
        {
            Console.WriteLine(string.Format("插入数据库:{0}",message));
        }
    }

 测试代码,但是。。。为了测试还要写数据库吗?我只是想测试下购物车的逻辑呃。。。

[TestMethod()]
        public void AddTest()
        {
            Cart cart = new Cart(); 
// TODO: Initialize to an appropriate value
            Product product = new Product();
            cart.Add(product);
            Assert.AreEqual<int>(1,cart.GetTotalCount());
        }

 

 开始可测试性重构

public interface ILog
    {
        void Log(string message);
    }

    public class Logger:ILog
    {
        //插入数据库
        public void Log(string message)
        {
            Console.WriteLine(string.Format("插入数据库:{0}",message));
        }
    }

 测试代码修改

 

 public ILog logger;


        public Cart(ILog logger)
        {
            ProductList = new List<Product>();
            this.logger = logger;
        }

 

 

 

 public class MemLog : ILog
    {
        public void Log(string message)
        {
            Console.WriteLine("记内存下就好");
        }
    }

[TestMethod()]
        public void AddTest()
        {
            Cart cart = new Cart(new MemLog());             Product product = new Product();
            cart.Add(product);
            Assert.AreEqual<int>(1,cart.GetTotalCount());
        }

 

这下不用访问数据库,都在内存中进行,为了可测试性的目的,我们通过重构,通过构造函数注入,mock对象等方法,对外部依赖解耦

转载于:https://www.cnblogs.com/brightwang/archive/2012/07/04/2577017.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值