学习单元测试业务中的单元测试
Posted 158-186
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习单元测试业务中的单元测试相关的知识,希望对你有一定的参考价值。
上一篇总结是简单的业务,是否正确修改了名称。
这次就要加上实际业务了。报价要加行为的,对一个物品添加一个报价的能力,这报价必须高于之前对这个物品的所有报价。
所以,添加代码
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.。
以上是关于学习单元测试业务中的单元测试的主要内容,如果未能解决你的问题,请参考以下文章