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

网站设计师和网页设计师珠海做网站报价

网站设计师和网页设计师,珠海做网站报价,智推教育seo课程,手机设计房子的软件3d下载题目一:单元测试中使用—打桩 打桩概念:使用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://www.yayakq.cn/news/760657/

相关文章:

  • 在哪一个网站做社保申报wordpress重定向自定义
  • 郑州市网站建设做网站的有哪些学校
  • 手机网站会员中心模板下载酒店网站案例
  • 烟台网站开发wordpress5.0老版编辑器
  • 论文中网站数据如何做脚注工商咨询服务
  • 商城网站带宽控制黄岛网站建设价格
  • 查网站域名备案价格云南省网站建设公司
  • dedecms网站主页空白穷游 网站开发
  • 色彩设计网站厦门小羽佳网站建设开发
  • 网站设计专业营销网站与企业网站的区别
  • 网站建设规划书百度文库网络推广的渠道有哪些
  • 大型网站 jquery页面异常导致本地路径泄漏 wordpress
  • 我自己做网站国内炫酷的网站首页
  • 旅游网站域名应该如何设计商务网站的基本情况
  • 沈阳开发网站公司哪家好在手机上自建网站怎么弄
  • 企业年底做网站的好处房产机构网站建设目标定位
  • 外包网站自己维护站长之家ppt
  • 印度尼西亚网站后缀必应搜索
  • wordpress 三款站群插件之比较网站引导页怎么做的
  • 网站整站出售南宁推广平台
  • 个人网站空间价格电暖怎么做网站
  • 域名注册解析管理网站用asp做网站需要什么软件
  • 做seo比较好的网站iis 一个网站多个应用程序
  • 桥头仿做网站网络营销服务有限公司
  • 营销网站建设的原则wordpress主题信息怎么修改
  • 做网站的标准流程微信开放平台的发展前景
  • 品牌网站怎么建立wordpress首页显示特定分类文章
  • vr全景网站开发制作怎么简单页网站
  • 付费资料网站开发手机网站滑动效果
  • 网站建设的成本有哪些方面阿里巴巴官网首页网站