当前位置: 首页 > news >正文

aspcms网站栏目调用wordpress 加载数据库表格

aspcms网站栏目调用,wordpress 加载数据库表格,怎么修改网页上的内容,怎么介绍自己的优势本文说明go语言自带的测试框架未提供或者未方便地提供的测试方案#xff0c;主要是用于解决写单元测试中比较头痛的依赖问题。也就是伪造模式#xff0c;经典的伪造模式有桩对象(stub),模拟对象(mock)和伪对象(fake)。比较幸运的是#xff0c;社区有丰富的第三方测试框架支持…本文说明go语言自带的测试框架未提供或者未方便地提供的测试方案主要是用于解决写单元测试中比较头痛的依赖问题。也就是伪造模式经典的伪造模式有桩对象(stub),模拟对象(mock)和伪对象(fake)。比较幸运的是社区有丰富的第三方测试框架支持支持。下面就对笔者亲身试用并实践到项目中的几个框架做介绍1.gomockgomock模拟对象的方式是让用户声明一个接口然后使用gomock提供的mockgen工具生成mock对象代码。要模拟(mock)被测试代码的依赖对象时候即可使用mock出来的对象来模拟和记录依赖对象的各种行为比如最常用的返回值调用次数等等。文字叙述有点抽象直接上代码dick.go中DickFunc依赖外部对象OutterObj本示例就是说明如何使用gomock框架控制所依赖的对象。func DickFunc( outterObj MockInterface,para int)(result int){fmt.Println(This init DickFunc)fmt.Println(call outter.func:)return outterObj.OutterFunc(para) }mockgen工具命令是mockgen -source {source_file}.go -destination {dest_file}.go比如本示例即是mockgen -source src_mock.go -destination dst_mock.go执行完后可在同目录下找到生成的dst_mock.go文件可以看到mockgen工具也实现了接口接下来就可以使用mockgen工具生成的NewMockInterFace来生产mock对象使用这个mock对象。OutterFunc()这个函数gomock在控制mock类时支持链式编程的方式其原理和其他链式编程类似一直维持了一个Call对象把需要控制的方法名入参出参调用次数以及前置和后置动作等最后使用反射来调用方法所以这个Call对象是mock对象的代理。jmockit的早期版本也是jdk自带的java.reflect.Proxy动态代理实现的(最近的版本是动态Instrumentation配合代理模式)。在本示例中只简单的更改了返回值抛砖引玉func TestDickFunc(t *testing.T ){mockCtrl : gomock.NewController(t) //defer mockCtrl.Finish()mockObj : dick.NewMockMockInterface(mockCtrl)mockObj.EXPECT().OutterFunc(3).Return(10)result :dick.DickFunc(mockObj,3)t.Log(resutl:,result)}使用go test命令执行这个单测从结果看本来应该输出3最后输出就是10和其他语言mock框架相似生产出来的Mock对象不用自己去重定义这么麻烦。2.httpexcept由于go在网络架构上的优秀封装使得go在很多网络场景被广泛使用而http协议是其中重要部分在面对http请求的时候可以对http的client进行测试算是mock的特殊应用场景。看一个简单的示例就轻松的看懂了func TestHttp(t *testing.T) {handler : FruitServer()server : httptest.NewServer(handler)defer server.Close()e : httpexpect.New(t, server.URL)e.GET(/fruits).Expect().Status(http.StatusOK).JSON().Array().Empty() }其中还支持对不同方法(包括Header,Post等)的构造以及返回值Json的自定义3.testify还有一个testify使用起来可以说兼容了《一》中的gocheck和gomock但是其mock使用稍微有点烦杂使用继承tetify.Mock(匿名组合)重新实现需要Mock的接口在这个接口里使用者自己使用Called(反射实现)被Mock的接口。《单元测试的艺术》中认为stub和mock最大的区别就依赖对象是否和被测对象有交互而从结果看就是桩对象不会使测试失败它只是为被测对象提供依赖的对象并不改变测试结果而mock则会根据不同的交互测试要求很可能会更改测试的结果。说了这么多理论但其实这两种方法都不是割裂的所以gomock框架除了像其名字一样可以模拟对象以外还提供了桩对象的功能(stub)。以其实现来说更像是一个桩对象的注入。但是因为兼容了多个有用的功能所以其在社区最为火爆。4.go-sqlmock还有一种比较常见的场景就是和数据库的交互场景go-sqlmock是sql模拟Mock驱动器主要用于测试数据库的交互go-sqlmock提供了完整的事务的执行测试框架最新的版本(16.11.02)还支持prepare参数化提交和执行的Mock方案。比如有这样的被测函数func recordStats(db *sql.DB, userID, productID int64) (err error) {tx, err : db.Begin()if err ! nil {return}defer func() {switch err {case nil:err tx.Commit()default:tx.Rollback()}}()if _, err tx.Exec(UPDATE products SET views views 1); err ! nil {return}if _, err tx.Exec(INSERT INTO product_viewers (user_id, product_id) VALUES (?, ?), userID, productID); err ! nil {return}return }func main() {db, err : sql.Open(mysql, root/root)if err ! nil {panic(err)}defer db.Close()if err recordStats(db, 1 , 5 ); err ! nil {panic(err)} }单测时func TestShouldUpdateStats(t *testing.T) {db, mock, err : sqlmock.New()if err ! nil {t.Fatalf(mock error: %s , err)}defer db.Close()mock.ExpectBegin()mock.ExpectExec(UPDATE products).WillReturnResult(sqlmock.NewResult(1, 1))mock.ExpectExec(INSERT INTO product_viewers).WithArgs(2, 3).WillReturnResult(sqlmock.NewResult(1, 1))mock.ExpectCommit()if err recordStats(db, 2, 3); err ! nil {t.Errorf(exe error: %s, err)}if err : mock.ExpectationsWereMet(); err ! nil {t.Errorf(not implements: %s, err)} }//测试回滚 func TestShouldRollbackStatUpdatesOnFailure(t *testing.T) {db, mock, err : sqlmock.New()if err ! nil {t.Fatalf(mock error: %s, err)}defer db.Close()mock.ExpectBegin()mock.ExpectExec(UPDATE products).WillReturnResult(sqlmock.NewResult(1, 1))mock.ExpectExec(INSERT INTO product_viewers).WithArgs(2, 3).WillReturnError(fmt.Errorf(some error))mock.ExpectRollback()// 执行被测方法,有错if err recordStats(db, 2, 3); err nil {t.Errorf(not error)}// 执行被测方法mock对象if err : mock.ExpectationsWereMet(); err ! nil {t.Errorf(not implements: %s, err)} }介绍了这么多框架最后需要说明的也可能最重要的是写代码时就应该考虑代码是可被测试的。要使得单元测试容易写或者说代码容易被测其实很重要的一个部分就是被测代码本身是容易被测的也就是说在设计和编写代码的时候就应该先想到相好如何单元测试甚至有人提出可以先写单元测试再写具体被测代码。因为一个接口(或者称为单元)在被设计好后它实现就确定了实际效果也确定了。这种方式被称作测试驱动开发(Test-Driven Development, TDD)。而对于已经写好的代码很大程度上不好测试有一种方式是测试性重构就是为了更好的测试而进行重构。这些一定程度上来说比了解这些框架更重要。以上内容就是本篇的全部内容以上内容希望对你有帮助有被帮助到的朋友欢迎点赞评论。如果对软件测试、接口测试、自动化测试、面试经验交流。感兴趣可以关注我我们会有同行一起技术交流哦。
http://www.yutouwan.com/news/1431/

相关文章:

  • 有没有做外贸的网站啊统计网站流量的网站
  • 58这种网站怎么做网络推广方案写作七步法
  • 泉州网站建站公司太阳宫网站建设
  • 网站建设交印花税吗济南润尔网站建设技术公司
  • 网站seo 规范上海外贸仓库
  • j2ee网站开发教程wordpress分类归档不科学
  • 开发施工建设网站审核国内建筑设计公司前十名
  • 网站规划的原则游戏动漫设计与制作
  • 做网站运营有提成吗国外seo网站
  • 外贸网站怎样注册安卓手机建网站
  • 邯郸市网络建站软装设计师需要具备的能力
  • 免费模板网站博客网站登录入口
  • 制作app软件平台北京seo收费
  • 南通网站推广公司哪家好网店装修的意义
  • 吉安律师网站建设新中式家具
  • 织梦网站地图模板样式漯河网站建设茂睿科技
  • 做天猫网站要多少钱做论坛网站看什么书
  • 网站开发有哪几种语言购物网站项目开发
  • 海口自助建站软件石家庄开发网站
  • wordpress如何修改主页合肥网站seo优化排名公司
  • 杭州 高端网站建设网站制作和设计需要多少钱
  • 织梦能做视频网站吗seo百度刷排名
  • 中国建设信用卡积分兑换网站轻芒小程序wordpress
  • 广东官网网站建设哪家好分享设计的网站
  • 重庆定制网站开发漳州建设银行网站
  • 前端课程网站商场装修设计
  • 有哪些可以做课件赚钱的网站微博优惠券网站怎么做的
  • 电子商务网站的建设收益大连网站建设价格
  • 怎么制作长图东莞百度推广排名优化
  • 金龙网站哪里建设的网站优化最为重要的内容是