python mock接口测试,Mock测试

  python mock接口测试,Mock测试

  模拟测试模拟测试为什么以及在什么情况下模拟使用模拟?如何用Mock测试?用easyMock进行单元测试?easyMock如何测试异常情况来构建MockServer

  模拟测试

  在测试一个对象A时,我们构建一些虚拟对象来模拟与A的交互,这些对象的行为都是我们按照预期事先设定好的,用这些对象来测试A在正常、异常或压力下是否正常工作。这种预设的预期对象称为模拟对象,用这种方法进行的测试称为模拟测试。

  为什么要用Mock,不管是前端分离、系统间依赖还是单元测试,都是用来测试的,以便更好地降低开发过程中各个环节之间的开发耦合,使之成为单元测试成功的条件。

  什么情况下应该使用Mock前后端分离?前端分离开发需要在前端开发中调用后端接口,但是后端代码逻辑还没有完成。系统间数据交互,开发过程中使用接口与其他系统交换数据,但可能存在其他系统的接口未开发或开发过程中出现严重错误。为了验证代码是否可用,可以使用Mock来测试数据伪造。在没有单元测试的情况下使用单元测试和mock模式时,每次执行单元测试时都必须构建一套完整的环境单元测试才能正常运行。但是,需要知道单元测试的类和方法是否实现了所需的功能功能测试。当我们进行集成测试时,我们只能确保我们的系统与其他系统之间的交互是通过使用预定义的接口格式来完成的。集成测试的时候忽略了其他系统,我们自己的系统也不需要像系统测试那样建立一系列的测试。当接口测试的团队使用敏捷开发模式时,我们的界面测试人员恨不得等到界面开发完成后再调试脚本。此时,我们可以根据接口规则构建Mock,并与开发同步开发和调试脚本。性能测试,并且为了避免模拟服务成为性能瓶颈,可以放弃系统B进行系统A的性能测试,这样就可以完成系统A的性能测试,不需要像实际环境中那样为系统B提供更高配置的服务器。如何用Mock测试?我们使用easyMock来帮助我们进行模拟测试。

  单元测试时,导入jar包mock easymock,并easymock对象。验证我们的方法是否写对了。

  在进行性能测试或接口测试时,必须使用easymock构建mockserver,防止后端和其他系统提供服务。

  EasyMock用于单元测试。为了使用easyMock,在pom文件中引入了easyMock的依赖性。

  ependencygroupidorg . easymock/groupid artifactideasymock/artifactid version 3.2/versionscopetest/scope/dependencyeasyomock

  market mock=easymock . create mock(stock market . class);easymock . expect(market mock . getprice( ebay ))。Andre return)42.00;Easymock.replay(营销);EasyMock.createMock有助于创建模拟对象。从Mock出来的对象的名称是marketMock,mock的类是StockMarket。

  EasyMock.expect()。addReturn)对于mock中对象的数据返回模拟非常有用。

  EasyMock.replay))会播放Mock使你设置的mock数据生效。

  让我们看一个实际的例子。

  产品类存储商品名称和数量。

  包com . hik . mockt;公共类产品{ privatestring name私人投入质量;publicproduct(stringname,int quantity){ this . name=name;this.quantity=数量;} public String getName(){ return name;} publicvidsetname(string name){ this . name=name;}公共访问

  quantity(){返回数量;} public void set quantity(int quantity){ this . quantity=quantity;}} Portfolio类保存商品列表。Portfolio类有一个计算商品总价的方法。

  包com。希克。mockt导入Java。util。ArrayList导入Java。util。列表;公共类投资组合{私有字符串名称;私人产品市场产品市场;私有列表产品products=new ArrayList product();public Double getTotalValue(){ Double value=0.0;对于(产品产品:这个。产品){价值=(产品市场。getprice(产品。getname())*产品。get quantity());}返回值;} public String getName(){ return name;} public void set name(String name){ this。name=名称;}公共产品市场getProductMarket(){返回产品市场;}公共void集产品市场(product market产品市场){这个。产品市场=产品市场;} public list product get products(){ return products;} public void set products(list product产品){ this。产品=产品;}public void addProduct(产品product){products.add(产品);}} 商品市场接口,提供了一个接口用来查询一个商品的价格

  包com。希克。mockt公共接口产品市场{ public Double getPrice(字符串产品名称);} 测试代码

  包com。希克。mockt导入org。easymock。easymock导入org。朱尼特。之前;导入org。朱尼特。测试;导入朱尼特。框架。测试用例;公共类组合测试扩展了测试案例{私人投资组合投资组合;私人产品市场market mock @ before public void setUp(){ Portfolio=new Portfolio();portfolio.setName(Veera的作品集。);市场模拟=easymock。创建模拟(产品市场。类);投资组合。设定产品市场(市场模拟);} @ test public void testGetTotalvalue(){ easymock。期待(市场模拟。getprice( EBAY ).安德鲁特(42.00);easymock。重播(市场模拟);产品ebay产品=新产品(‘易趣’,2);投资组合. addProduct(易趣产品);资产净值(84.00,投资组合。gettotalvalue());}} EasyMock怎么进行异常情况的测试呢定义一个接口计算器服务,提供各种计算功能

  包com。希克。mockt公共接口CalculatorService { public double add(双输入1,双输入2);公共双减法(双输入1,双输入2);公共双重多重(双输入1,双输入2);公共双除(双输入1,双输入2);} 创建一个类用来使用提供出的接口我们叫他数学应用

  包com。希克。mockt公开课数学应用{ private CalculatorService CalculatorService;public void setCalculatorService(CalculatorService CalculatorService){ this。CalculatorService=CalculatorService;}public double add(double input1,double input 2){ return calculatorservice。add(输入1,输入2);} public double subtract(双输入1,双输入2){ return calculatorservice。减法(输入1,输入2);} public double multi py(双输入1,双输入2){ return calculatorservice。multi py(输入1,输入2);} public double divide(双输入1,双输入2){ return calculatorservice。除法(输入1,输入2);}} 然后我们开始写测试类用来模拟当发生异常的时候easyMock是怎么处理的

  包com。希克。mockt导入org。easymock。easymock导入org。easymock。easymock runner导入org。easymock。嘲弄;导入org。easymock。测试对象;导入org。朱尼特。测试;导入org。朱尼特。奔跑者。与.一起跑;导入朱尼特。框架。断言;//运行方式测试类的时候初始化测试数据@RunWith(EasyMockRunner.class)公共类MathApplicationTester {//声明使用哪个类使用模拟的对象@ TestSubjectMathApplication数学应用=新数学应用();//声明哪个模拟的对象将被注入@模拟计算器服务calculatorService;//当测试预期有异常时,声明期望会有运行时异常@ Test(应为=运行时异常。class)public void testAdd(){//增加模拟的抛出异常easymock。expect(calculatorservice。添加(10.0,20.0).和行(新的运行时异常(’加法没有实现));//激活模仿easymock。replay(calculatorService);//测试方法断言。断言等于(数学应用程序。添加(10.0,20.0,30.0);//判断calcService调用是否被创建easymock。验证(calculatorService);}} 当我们不使用模拟的的时候我们只需要将EasyMock.replay()给注释掉就可以了

  模拟服务器的搭建待续…

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: