学习单元测试(二)业务中的单元测试

  上一篇总结是简单的业务,是否正确修改了名称。

  这次就要加上实际业务了。报价要加行为的,对一个物品添加一个报价的能力,这报价必须高于之前对这个物品的所有报价。

  所以,添加代码

public class Item
    {

        public int ItemID { get; private set; }//拍卖物品主键

        public string Title { get; set; }//拍卖物品的名称

        public string Description { get; set; }//拍卖物品的描述

        public DateTime AuctionEndDate { get; set; }//拍卖结束时间

        public IList<Bid> Bids { get; set; }//该拍卖物品的报价集合


        //对一个物品添加一个报价的能力,这报价必须高于之前对这个物品的所有报价
        public void AddBid(Member memberParam, decimal amountParam)
        {
            //1当没有报价存在时,可以添加任何报价
            //2当有报价存在时,可以添加一个比现有报价高的值
            //3当有报价存在时,不能添加一个比现有报价低的值

            throw new NotImplementedException();

        }

    }

  代码中,添加了没有实现的AddBid方法。

  描述了添加报价的实际业务要求,1当没有报价存在时,可以添加任何报价;2当有报价存在时,可以添加一个比现有报价高的值;3当有报价存在时,不能添加一个比现有报价低的值

  先写测试的代码

  1.当没有报价存在时,可以添加任何报价;  

        [TestMethod]
        public void CanAddBidMethod()
        {
            //布置 

            Item target = new Item();

            Member memberParam = new Member();

            decimal amountParam = 150m;

            //动作
            target.AddBid(memberParam, amountParam);

            //断言
            Assert.AreEqual(1, target.Bids.Count);
            Assert.AreEqual(amountParam, target.Bids[0].BidAmount);
        }    

 

  断言,Item的报价集合是一个,因为是第一个添加的; 

  2.当没有报价存在时,可以添加一个比现在报价高的值;    

        [TestMethod]
        public void CanAddHigherBidMethod()
        {
            //布置
            Item target = new Item();

            Member firstMember = new Member();
            Member secondMember = new Member();
            Decimal amountParam = 150m;

            //动作
            target.AddBid(firstMember, amountParam);
            target.AddBid(secondMember, amountParam + 10);

            //断言
            Assert.AreEqual(2, target.Bids.Count);
            
        }    

 

  两个动作,添加了两个报价,其中第二个报价比第一个高。断言是现在的集合中有两个报价。

 

  3.当有报价存在时,不能添加一个比现在报价低的值;

        [TestMethod]
        [ExpectedException(typeof(InvalidOperationException))]
        public void CannotAddLowerBidMethod()
        {
            //布置
            Item target = new Item();

            Member memberParam = new Member();
            Decimal amountParam = 150m;

            //动作
            target.AddBid(memberParam, amountParam);
            target.AddBid(memberParam, amountParam - 10);
        }        

 

  布置好场景后。添加了两个报价,其中第二个是比报价低的。没有断言,是抛出了一个InvalidOperationException类型的异常。

 

  三个测试已经写好,去实现代码  

   public class Item
    {
        public Item()
        {
            Bids = new List<Bid>();
        }

        public int ItemID { get; private set; }//拍卖物品主键

        public string Title { get; set; }//拍卖物品的名称

        public string Description { get; set; }//拍卖物品的描述

        public DateTime AuctionEndDate { get; set; }//拍卖结束时间

        public IList<Bid> Bids { get; set; }//该拍卖物品的报价集合


        //对一个物品添加一个报价的能力,这报价必须高于之前对这个物品的所有报价
        public void AddBid(Member memberParam, decimal amountParam)
        {
            //1当没有报价存在时,可以添加任何报价
            //2当有报价存在时,可以添加一个比现有报价高的值
            //3当有报价存在时,不能添加一个比现有报价低的值 
        
            //在集合为0或者是报价大于集合中的最大报价
            if (Bids.Count() == 0 || amountParam > Bids.Max(e => e.BidAmount))
            {
                //添加到集合
                Bids.Add(new Bid() { BidAmount = amountParam, DatePlaced = DateTime.Now, Menber = memberParam });

            }
            else 
            {
                //只能是把集合中已存在的报价,再低的话,抛出InvalidOperation的异常
                throw new InvalidOperationException("Bid amount too low");
            }

        }
    }

 

 ps:拍卖中的确是要报价高于之前的价格,在单元测试中如何将这实际生活中的场景用计算机语言表达出程序,可以把这一个业务场景分成多个单元测试,比如这篇总结的1,2,3.。

 

  

转载于:https://www.cnblogs.com/158-186/p/10901673.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值