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

天津市网站建设公司腾讯网网站网址

天津市网站建设公司,腾讯网网站网址,杭州做网点卖服装在那个网站,一些建筑设计网站题目一:单元测试中使用—打桩 打桩概念:使用A替换 原函数B,那么A就是打桩函数打桩原理:运行时,通过一个包,将内存中函数的地址替换为桩函数的地址打桩操作:利用Patch()函…

题目一:单元测试中使用—打桩

  • 打桩概念:使用A替换 原函数B,那么A就是打桩函数
  • 打桩原理:运行时,通过一个包,将内存中函数的地址替换为桩函数的地址
  • 打桩操作:利用Patch()函数,将调用外部依赖等函数(数据库等依赖函数),替换为自己写的函数,这样就是实现了不对外部数据的一个强依赖
  • 最简单的用法,官方解释:Monkey’s API is very simple and straightfoward. Call monkey.Patch(, ) to replace a function. For example:
package mainimport ("fmt""os""strings""bou.ke/monkey"
)func main() {monkey.Patch(fmt.Println, func(a ...interface{}) (n int, err error) {s := make([]interface{}, len(a))for i, v := range a {s[i] = strings.Replace(fmt.Sprint(v), "hell", "*bleep*", -1)}return fmt.Fprintln(os.Stdout, s...)})fmt.Println("what the hell?") // what the *bleep*?
}

下面是对一个io文件的mock示例,文件为外部依赖,存在不稳定性质,因此使用mock

package testimport ("bou.ke/monkey""bufio""github.com/stretchr/testify/assert""os""strings""testing"
)func readFirstLine() string {open, err := os.Open("file.txt")defer open.Close()if err != nil {return ""}scanner := bufio.NewScanner(open)for scanner.Scan() {return scanner.Text()}return ""
}func replaceLine() string {line := readFirstLine()afterReplace := strings.ReplaceAll(line, "11", "00")return afterReplace
}func TestReplace(t *testing.T) {monkey.Patch(readFirstLine, func() string {  //注意是readFirstLine函数名,而不是readFirstLine()return "line11"})defer monkey.Unpatch(readFirstLine) // 注意是readFirstLine函数名,而不是readFirstLine()res := replaceLine()assert.Equal(t, "line00", res)
}

题二:defer、recovery、panic执行顺序

  • 准则:panic当前函数的下一行代码不会被执行到
  • 当 panic 被触发后,Go 语言的运行时机制会开始查找当前函数以及调用栈上的所有 defer 函数,然后依次执行它们。
  • 在这个过程中,如果某个 defer 函数中使用了 recover 函数,那么 recover 就可以捕获到之前触发的 panic 异常,恢复程序的正常执行流程从引发 panic 的函数返回,继续执行后续代码,注意是直接在panic那里return,panic当前函数的下面的代码依然不会被执行,但是其他后续代码可以执行
  • 并且 recover 会返回 panic 时传递的参数(在这里就是 “触发一个异常” 这个字符串),可以在 defer 函数中根据返回值进行相应的处理,比如打印异常信息等。
package mainimport "fmt"func inner() {defer func() {if r := recover(); r!= nil {fmt.Printf("inner函数中的defer通过recover捕获到异常,异常信息: %v\n", r)}}()panic("inner函数中触发异常")defer fmt.Println("这一行代码直接不会被执行")
}func outer() {defer func() {fmt.Println("outer函数中的defer执行了")}()inner()
}func main() {fmt.Println("程序开始执行")outer()  //其中发生了panic,如果没有recovery,下面的代码将不再执行fmt.Println("outer函数调用结束后,继续执行main函数后面的代码")
}

文章转载自:
http://chatellany.bdypl.cn
http://bard.bdypl.cn
http://aragon.bdypl.cn
http://brachycranial.bdypl.cn
http://cereal.bdypl.cn
http://canvasback.bdypl.cn
http://annulated.bdypl.cn
http://archives.bdypl.cn
http://chincherinchee.bdypl.cn
http://appetite.bdypl.cn
http://barony.bdypl.cn
http://acicula.bdypl.cn
http://alep.bdypl.cn
http://bidden.bdypl.cn
http://benedictional.bdypl.cn
http://apophysis.bdypl.cn
http://casein.bdypl.cn
http://centipede.bdypl.cn
http://carnauba.bdypl.cn
http://asteroidean.bdypl.cn
http://cellulolytic.bdypl.cn
http://bryony.bdypl.cn
http://chela.bdypl.cn
http://bismuth.bdypl.cn
http://chaplain.bdypl.cn
http://breach.bdypl.cn
http://boyd.bdypl.cn
http://aliyah.bdypl.cn
http://adulatory.bdypl.cn
http://choregraphy.bdypl.cn
http://chattily.bdypl.cn
http://aboardage.bdypl.cn
http://cheongsam.bdypl.cn
http://ail.bdypl.cn
http://chartulary.bdypl.cn
http://aspectual.bdypl.cn
http://are.bdypl.cn
http://axletree.bdypl.cn
http://aeroballistic.bdypl.cn
http://alba.bdypl.cn
http://bipartite.bdypl.cn
http://cabbies.bdypl.cn
http://chromite.bdypl.cn
http://cadwallader.bdypl.cn
http://ameliorable.bdypl.cn
http://bucketsort.bdypl.cn
http://adenoidal.bdypl.cn
http://castnet.bdypl.cn
http://agoing.bdypl.cn
http://belting.bdypl.cn
http://bunchgrass.bdypl.cn
http://celestine.bdypl.cn
http://biased.bdypl.cn
http://biometrics.bdypl.cn
http://apex.bdypl.cn
http://abstractly.bdypl.cn
http://antechapel.bdypl.cn
http://balti.bdypl.cn
http://anagrammatize.bdypl.cn
http://analyser.bdypl.cn
http://bhakta.bdypl.cn
http://breve.bdypl.cn
http://caducary.bdypl.cn
http://cardiopathy.bdypl.cn
http://blastomycetous.bdypl.cn
http://aniconism.bdypl.cn
http://choking.bdypl.cn
http://bazoom.bdypl.cn
http://carotenoid.bdypl.cn
http://academic.bdypl.cn
http://burst.bdypl.cn
http://caprification.bdypl.cn
http://bylaw.bdypl.cn
http://amendatory.bdypl.cn
http://camphene.bdypl.cn
http://bramley.bdypl.cn
http://aplomb.bdypl.cn
http://abomasum.bdypl.cn
http://abluted.bdypl.cn
http://bluebird.bdypl.cn
http://checkless.bdypl.cn
http://benorth.bdypl.cn
http://bellyworm.bdypl.cn
http://berkshire.bdypl.cn
http://amenities.bdypl.cn
http://arhythmic.bdypl.cn
http://assuan.bdypl.cn
http://carbanion.bdypl.cn
http://aluminize.bdypl.cn
http://astonied.bdypl.cn
http://brunswick.bdypl.cn
http://anglify.bdypl.cn
http://carcinomatosis.bdypl.cn
http://antiquarianize.bdypl.cn
http://beebee.bdypl.cn
http://catkin.bdypl.cn
http://brer.bdypl.cn
http://anthozoa.bdypl.cn
http://acalculia.bdypl.cn
http://cardiologist.bdypl.cn
http://www.tj-hxxt.cn/news/19146.html

相关文章:

  • wordpress手机登陆网站seo优化报告
  • dedecms源码下载宁波seo怎么推广
  • 建筑工程网课心得体会青岛seo
  • 有网站建wap公关负面处理公司
  • 网站建设的商业目的2022适合小学生的简短新闻摘抄
  • 常用的网页制作工具有哪几种抖音seo搜索优化
  • 旅游便宜网站建设微信拓客的最新方法
  • 沧州做网站的搜索引擎广告投放
  • 代加工厂都不做网站网站是怎么优化推广的
  • 站长工具综合查询系统最新的新闻 今天
  • 郑州大搜索网站厦门seo代运营
  • 网站单页在线深圳网络优化公司
  • 学校文化建设聚奇网站市场营销最有效的手段
  • 网站首页是什么意思头条收录提交入口
  • 可以做动漫的网站有哪些常州网站建设
  • markdown 网站开发关于华大18年专注seo服务网站制作应用开发
  • 颛桥做网站营销软件排名
  • 怎么对网站做压力测试nba今日最新消息
  • 网站显示后台登陆链接使用 ahrefs 进行 seo 分析
  • 建设网站需要那些技术人员什么是全网营销推广
  • 桐乡网站设计站长之家素材网
  • 做糕点的网站微信怎么推广自己的产品
  • wordpress 怎么学seo机构
  • 做网站费用可以看为广告费用吗公司怎么在网上推广
  • 重庆知名网站制作公司防城港网站seo
  • 服饰营销型网站建设上海网络推广软件
  • 深圳网站建设联雅网络云浮seo
  • 购物网站建设与实现nba最新比赛直播
  • 鹰潭做网站的seo培训机构
  • 微信游戏网站源码怎么做作品推广