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

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

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

  所以,添加代码

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

时间: 2024-11-08 23:49:12

学习单元测试(二)业务中的单元测试的相关文章

SpringMVC学习(十二)——SpringMVC中的拦截器

SpringMVC学习(十二)--SpringMVC中的拦截器 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.本文主要总结一下SpringMVC中拦截器是如何定义的,以及测试拦截器的执行情况和使用方法. SpringMVC中拦截器的定义和配置 SpringMVC中拦截器的定义 在SpringMVC中,定义拦截器要实现HandlerInterceptor接口,并实现该接口中提供的三个方法,如下: public class Inter

深度学习在搜索业务中的探索与实践

本文根据美团高级技术专家翟艺涛在2018 QCon全球软件开发大会上的演讲内容整理而成,内容有修改. 引言 2018年12月31日,美团酒店单日入住间夜突破200万,再次创下行业的新纪录,而酒店搜索在其中起到了非常重要的作用.本文会首先介绍一下酒店搜索的业务特点,作为O2O搜索的一种,酒店搜索和传统的搜索排序相比存在很大的不同.第二部分介绍深度学习在酒店搜索NLP中的应用.第三部分会介绍深度排序模型在酒店搜索的演进路线,因为酒店业务的特点和历史原因,美团酒店搜索的模型演进路线可能跟大部分公司都不

JavaWeb学习总结(二)——JSP中的九个内置对象

一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用. 由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响. JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9

鸟书shell 学习笔记(二) shell中正则表达式相关

通配符与正则表达式的区别 通配符是bash原生支持的语法,正则表达式是处理字符串的一种表示方式, 正则表达式需要支持的工具支持才可以 语系设置 : export LANG=C grep alias 设置 : grep --color=auto grep 的一些高级参数 grep [-A] [-B] '搜寻字符串' filename //同时输出之前的k行和之后的m行 -A : 后面可加数字,表示列出改行以及之后的n行 -B : 列出前面几行 搜寻关键字如果中间使用正则表达式的话,则正则表达式部分

RIGHT-BICEP单元测试——“二柱子四则运算升级版”

RIGHT-BICEP单元测试 ——“二柱子四则运算升级版” ”单元测试“这对于我们来说是一个全新的专业含义,在上了软件工程这门课,并当堂编写了简单的"求一组数中的最大值"函数的单元测试之后,我们对它有了全新的认识. 单元测试:即为, 老师让我们回去之后将“二柱子四则运算升级版”的程序进行单元测试(二柱子程序的源码我已经上传,这里不再重复,只列举单元测试的部分和分析),如下: PS.这里附上老师上课讲的关于RIGHT-BICEP测试的方法: 6个值得测试的具体部位,他们能够提高我们的测

NMock学习系列(二)--- NMock在MVP架构系统的单元测试中的应用

介绍 上篇已经学习了NMock的一些基础概念和代码,同时也想到了可能的两个应用场景,本篇开始学习下第一个应用场景---NMock在MVP架构模式下的应用场景.MVP的架构模式概念比较简单,主要是以接口的形式隔离视图与控制器之间的耦合,具体对于MVP模式的介绍请自行搜索学习.本篇接下来的学习前提是读者了解MVP的架构模式,主要明白视图接口的解耦. 应用场景 基于MVP模式的项目往往业务逻辑的编写和视图的建立是分开进行的,视图只需定义出接口供业务控制器进行依赖调用.所以如果在视图还未具体实现的情况下

快速学习C语言二: 编译自动化, 静态分析, 单元测试,coredump调试,性能剖析

上次的Hello world算是入门了,现在学习一些相关工具的使用 编译自动化 写好程序,首先要编译,就用gcc就好了,基本用法如下 gcc helloworld.c -o helloworld.o helloworld.c是源码,helloworld.o是编译后的可执行文件,运行的话就用 ./helloworld.o就可以了. 但是如果代码写的多了,每次改动完都手动用gcc编译太麻烦了,所以要用Makefile来 自动化这项工作,在当前目录下创建Makefile文件,大概如下 hellowor

使用 Visual Studio Team Test 进行单元测试和java中的测试

原文:使用 Visual Studio Team Test 进行单元测试和java中的测试 C#中test测试地 方法一. 1.从NUnit官网(http://www.nunit.org/index.php)下载最新版本NUnit,当前版本为NUnit2.5.8. 2.安装后,在VS2008中新建测试项目StartNUnit 3.右击项目选择属性,在打开的窗口中选择调试.如图: 4.选择启动外部程序,并定位到NUnit的启动程序nunit.exe.如图: 5.在项目中添加NUnit引用,如图:

iOS开发中的单元测试(三)——URLManager中的测试用例解析

本文转载至 http://www.cocoachina.com/cms/plus/view.php?aid=8088 此前,我们在<iOS开发中的单元测试(一)&(二)>中介绍了从使用者的角度对比当下比较流行的两款单元测试框架OCUnit和GHUnit,这篇文章中我们将介绍一款导航控件URLManager. URLManager是一个基于UINavigationController和UIViewController,以URL Scheme为设计基础的导航控件,目的是实现ViewCont