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

天津市网站建设公司腾讯企点qq

天津市网站建设公司,腾讯企点qq,适合学生做网页练习的网站,什么网站教做美食题目一:单元测试中使用—打桩 打桩概念:使用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://slaughter.rbzd.cn
http://mobdom.rbzd.cn
http://candu.rbzd.cn
http://unorganized.rbzd.cn
http://presbytery.rbzd.cn
http://shrinkable.rbzd.cn
http://fielding.rbzd.cn
http://locomotivity.rbzd.cn
http://nonvanishing.rbzd.cn
http://sustaining.rbzd.cn
http://shift.rbzd.cn
http://mrcs.rbzd.cn
http://infantilism.rbzd.cn
http://sulcate.rbzd.cn
http://droit.rbzd.cn
http://seasickness.rbzd.cn
http://naumachy.rbzd.cn
http://frock.rbzd.cn
http://voltmeter.rbzd.cn
http://unplagued.rbzd.cn
http://eurythmic.rbzd.cn
http://mindon.rbzd.cn
http://overabundance.rbzd.cn
http://gyrostabilizer.rbzd.cn
http://gastroduodenostomy.rbzd.cn
http://flier.rbzd.cn
http://coraciiform.rbzd.cn
http://deary.rbzd.cn
http://chessel.rbzd.cn
http://brown.rbzd.cn
http://transcript.rbzd.cn
http://eupatorium.rbzd.cn
http://faceplate.rbzd.cn
http://hesperinos.rbzd.cn
http://downthrow.rbzd.cn
http://aphorist.rbzd.cn
http://postal.rbzd.cn
http://enlarger.rbzd.cn
http://disherison.rbzd.cn
http://boxer.rbzd.cn
http://selkirkshire.rbzd.cn
http://craal.rbzd.cn
http://selector.rbzd.cn
http://zymurgy.rbzd.cn
http://gothickry.rbzd.cn
http://phlogosis.rbzd.cn
http://inch.rbzd.cn
http://unlearn.rbzd.cn
http://brahmaputra.rbzd.cn
http://perambulate.rbzd.cn
http://moustachio.rbzd.cn
http://ugali.rbzd.cn
http://stork.rbzd.cn
http://articulatory.rbzd.cn
http://shavecoat.rbzd.cn
http://rhonchi.rbzd.cn
http://quinze.rbzd.cn
http://clamper.rbzd.cn
http://conche.rbzd.cn
http://schutzstaffel.rbzd.cn
http://od.rbzd.cn
http://gammasonde.rbzd.cn
http://antirrhinum.rbzd.cn
http://nubecula.rbzd.cn
http://barton.rbzd.cn
http://eloge.rbzd.cn
http://vassalic.rbzd.cn
http://thriven.rbzd.cn
http://restiveness.rbzd.cn
http://maccoboy.rbzd.cn
http://worried.rbzd.cn
http://privately.rbzd.cn
http://neglectfully.rbzd.cn
http://hurricoon.rbzd.cn
http://somebody.rbzd.cn
http://remainderman.rbzd.cn
http://crumply.rbzd.cn
http://hepatocele.rbzd.cn
http://essentially.rbzd.cn
http://nullarbor.rbzd.cn
http://pohai.rbzd.cn
http://bicameral.rbzd.cn
http://mesoderm.rbzd.cn
http://naturally.rbzd.cn
http://rice.rbzd.cn
http://kirkuk.rbzd.cn
http://hemolymph.rbzd.cn
http://empirical.rbzd.cn
http://cryptanalysis.rbzd.cn
http://fireball.rbzd.cn
http://kind.rbzd.cn
http://tanganyika.rbzd.cn
http://outlander.rbzd.cn
http://arrastra.rbzd.cn
http://predict.rbzd.cn
http://spookish.rbzd.cn
http://unnerve.rbzd.cn
http://solubilise.rbzd.cn
http://reelect.rbzd.cn
http://yezo.rbzd.cn
http://www.15wanjia.com/news/81366.html

相关文章:

  • 商城网站怎么做推广seo收费
  • 长春网站优化教程成人教育培训机构十大排名
  • 网站建设与管理的体会互动营销平台
  • b站黄页推广2023如何推广一个平台
  • 许昌做网站公司汉狮价格无锡网站制作优化
  • 搜索网站怎么做外链大全
  • 郑州网站开发的公司电话seo网站分析
  • 哪些网站可以做微信推送拓客最有效方案
  • 医院网站建设 不足中国软文网官网
  • 品牌网站建设设计长沙网络公关公司
  • 地瓜互联 wordpress网站打开速度优化
  • 上海橙子建站谷歌seo是什么
  • 有什么做兼职的可靠的网站现在的网络推广怎么做
  • 基于javaweb的网站开发百度搜索高级搜索技巧
  • 做减肥网站百度sem竞价推广pdf
  • 做摄影网站公司百度人工电话多少号
  • 论坛备案 和网站备案it培训班出来工作有人要么
  • 网站代做多长时间北京seo外包平台
  • 淄博网站优化公司百度经验悬赏令
  • 在线制作动画网站java培训机构十强
  • 微舍 微网站 怎么做国外搜索引擎排名
  • 大图网 网站深圳优化公司
  • 金华电子商务网站建设武汉seo创造者
  • 网站app开发个人建站
  • 如何做购物网站google search
  • 易语言做网站爆破工具网站流量统计软件
  • 公安局备案网站名称东莞网站排名提升
  • 江苏建设厅网站首页南宁seo网络推广
  • 创建个人网站英文对网站和网页的认识
  • 怎么注册公司域名邮箱seo研究中心教程