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

计算机网站建设与管理是什么求职设计师的个人简历模板

计算机网站建设与管理是什么,求职设计师的个人简历模板,贵阳地铁建设网站,wordpress获取用户角色Go-知识测试-子测试 1. 介绍2. 例子3. 子测试命名规则4. 选择性执行5. 子测试并发6. testing.T.Run7. testing.T.Parallel8. 子测试适用于单元测试9. 子测试适用于性能测试10. 总结10.1 启动子测试 Run10.2 启动并发测试 Parallel 建议先看#xff1a;https://blog.csdn.net/a… Go-知识测试-子测试 1. 介绍2. 例子3. 子测试命名规则4. 选择性执行5. 子测试并发6. testing.T.Run7. testing.T.Parallel8. 子测试适用于单元测试9. 子测试适用于性能测试10. 总结10.1 启动子测试 Run10.2 启动并发测试 Parallel 建议先看https://blog.csdn.net/a18792721831/article/details/140062769 Go-知识测试-工作机制 1. 介绍 子测试提供了一种在一个测试函数中执行多个测试的能力可以自己编排执行顺序或者做一些初始化等操作。 2. 例子 比如如下代码 import testingfunc SubA(t *testing.T) {t.Log(test A t.Name()) }func SubB(t *testing.T) {t.Log(test B t.Name()) }func SubC(t *testing.T) {t.Log(test C t.Name()) }func TestSub(t *testing.T) {t.Run(nameA, SubA)t.Run(nameB, SubB)t.Run(nameC, SubC) }使用go test -v xx_test.go执行 3. 子测试命名规则 Run()方法的第一个参数作为子测试的名字这里只是本层级的名字。 实际上子测试的内部命名规则是 父测试名字/传递给Run的名字 比如我们在B里面在调用A 执行后 name具有传递性 4. 选择性执行 在上面我们有 nameA,nameB,nameC 三个测试如果只是想执行A呢 使用go test -v xx_test.go -run TestSub/nameA 选择性执行的字符串是包含匹配不是严格的正则匹配。 5. 子测试并发 可以看到前面的子测试都是根据代码顺序执行串行执行并没有并发。 使用 t.Parallel 可以让当前测试函数允许并发。 比如如下例子不加并发的时候 import (testingtime )func SubA(t *testing.T) {t.Log(test A t.Name())time.Sleep(time.Second*3) }func SubB(t *testing.T) {t.Log(test B t.Name())time.Sleep(time.Second*2) }func SubC(t *testing.T) {time.Sleep(time.Second*1)t.Log(test C t.Name()) }func TestSub(t *testing.T) {t.Run(nameA, SubA)t.Run(nameB, SubB)t.Run(nameC, SubC) }执行后用时超过6秒 允许并发 import (testingtime )func SubA(t *testing.T) {t.Parallel()t.Log(test A t.Name())time.Sleep(time.Second * 3) }func SubB(t *testing.T) {t.Parallel()t.Log(test B t.Name())time.Sleep(time.Second * 2) }func SubC(t *testing.T) {t.Parallel()time.Sleep(time.Second * 1)t.Log(test C t.Name()) }func TestSub(t *testing.T) {t.Run(nameA, SubA)t.Run(nameB, SubB)t.Run(nameC, SubC) }A最先被调度但是确是最后执行完毕。 需要注意的是当开启子测试并发后调用了子测试后父测试的代码和子测试代码执行顺序就是随机的了。 所以如果在主测试中需要做一些初始化然后在执行子测试那么需要注意有可能初始化还未完成子测试已经开始执行了。 6. testing.T.Run // 将运行f作为名为name的t的子测试。它在一个单独的goroutine中运行f // 并且阻塞直到f返回或调用t。并行成为并行测试。 // 运行报告f是否成功或者至少在调用t.Parallel之前没有失败。 // // Run可以从多个goroutine同时调用但所有此类调用 // 必须在t的外部测试函数返回之前返回。 func (t *T) Run(name string, f func(t *T)) bool {atomic.StoreInt32(t.hasSub, 1)testName, ok, _ : t.context.match.fullName(t.common, name)if !ok || shouldFailFast() {return true}//记录此调用点的堆栈跟踪以便如果子测试//在单独的堆栈中运行的函数被标记为助手我们可以//继续将堆栈遍历到父测试中。var pc [maxStackLen]uintptrn : runtime.Callers(2, pc[:])t T{common: common{barrier: make(chan bool),signal: make(chan bool, 1),name: testName,parent: t.common,level: t.level 1,creator: pc[:n],chatty: t.chatty,},context: t.context,}t.w indenter{t.common}if t.chatty ! nil {t.chatty.Updatef(t.name, RUN %s\n, t.name)}//而不是在调用之前减少此测试的运行计数//tRunner并在之后增加它我们依靠tRunner保持//计数正确。这样可以确保运行一系列顺序测试//而不会被抢占即使它们的父级是并行测试。这//如果*parallel1则可以特别减少意外。go tRunner(t, f)if !-t.signal {//此时FailNow很可能是在//其中一个子测验的家长测验。继续中止链的上行。runtime.Goexit()}return !t.failed }在testing.Run中会创建一个testing.T对象然后将调用者作为parent然后调用testing.tRunner执行。 同时会设置父测试有子测试的标志hasSub。 一个树形结构父测试不知道有哪些子测试但是父测试知道需要等待子测试执行完成。 7. testing.T.Parallel // 与此测试并行运行的并行信号且仅与 // 其他平行测试。当测试由于使用而多次运行时 // -test.count或-test.cpu单个测试的多个实例从未在中运行 // 彼此平行。 func (t *T) Parallel() {if t.isParallel {panic(testing: t.Parallel called multiple times)}if t.isEnvSet {panic(testing: t.Parallel called after t.Setenv; cannot set environment variables in parallel tests)}t.isParallel trueif t.parent.barrier nil {// T.Parallel has no effect when fuzzing.// Multiple processes may run in parallel, but only one input can run at a// time per process so we can attribute crashes to specific inputs.return}//我们不想把等待串行测试的时间包括在内//在测试持续时间内。记录到目前为止经过的时间并重置//计时器之后。t.duration time.Since(t.start)//添加到要由父级发布的测试列表中。t.parent.sub append(t.parent.sub, t)t.raceErrors race.Errors()if t.chatty ! nil {//不幸的是即使PAUSE表示命名测试是*no//运行时间较长*cmd/test2json将其解释为更改活动测试//用于日志解析。我们可以修复cmd/test2json但是//不会修复已经shell的第三方工具的现有部署//向外扩展到cmd/test2json的旧版本——因此仅修复cmd/test1json//目前还不够。t.chatty.Updatef(t.name, PAUSE %s\n, t.name)}t.signal - true // Release calling test.-t.parent.barrier // Wait for the parent test to complete.t.context.waitParallel()if t.chatty ! nil {t.chatty.Updatef(t.name, CONT %s\n, t.name)}t.start time.Now()t.raceErrors -race.Errors() }设置当前testing.T的并发状态为true因为Parallel在子测试中调用的因此testing.T是子测试的T。 testing.Run是在父测试中调用的因此testing.T是父测试。 将当前子测试加入到父测试的sub列表中由父测试启动。 8. 子测试适用于单元测试 在testing.common中hasSub表示是否有子测试sub 则是子测试列表(testing.T) 在testing.tRunner中有对子测试相关的支持 if len(t.sub) 0 表示如果有子测试那么触发子测试执行并且等待子测试执行完成。 else if t.isParallel 表示如果是允许并发的那么释放锁。 testing.tRunner 不管是父测试还是子测试都会执行。 9. 子测试适用于性能测试 在testing.B.Run中设置父测试的hasSub标志为1。 并且创建一个testing.B通过先调用testing.B.run1在调用testing.B.run执行。 并且子测试的数据会附加到父测试的报告中。 10. 总结 10.1 启动子测试 Run Run 函数启动一个单独的协程来运行名字为name的子测试f并且会阻塞等待其执行结束除非子测试f显式调用Parallel将自己编程一个可并行的测试最后返回bool类型的测试结果。 所有的测试都是由TestMain使用Run方法直接或者间接启动。 每启动一个子测试都会创建一个testing.T或者testing.B变量该变量集成当前测试的部分属性然后以新的 协程执行当前测试会在子测试结束后返回子测试的结果。 子测试退出条件要么是子测试执行结束要么是子测试设置了Parallel否则是异常退出。 10.2 启动并发测试 Parallel Parallel方法将当前测试加入并发队列。 启动并发测试在排队等待过程中消耗的时间不能统计到测试的耗时内所以在测试真正被并发调度后清空等待时间。
http://www.w-s-a.com/news/111288/

相关文章:

  • 网站开发公司成本是什么门户网站宣传方案
  • 上海 企业网站建设网站怎么开通微信支付
  • 饮料网站建设wordpress主题猫
  • 网站建设需要编码不有没有专门的网站做品牌授权的
  • 做爰在线网站免费空间列表
  • 网站外链建设工作总结郑州网站建设扌汉狮网络
  • 建设企业网站的需要多长时间网站使用说明书模板
  • 建网站首页图片哪里找263企业邮箱网页版登录
  • 盐城网站建设电话高端定制网站
  • 成都网站seo技术施工企业样板先行制度
  • 高端网站建设电话河北建筑工程信息网站
  • 亲 怎么给一个网站做备份财务系统有哪些软件
  • wordpress重新手机优化专家下载
  • 怎样把网站做成软件设计工作室怎么接单
  • html网站设计实例代码重庆多个区划定风险区
  • 推广方案设计同一个网站可以同时做竞价和优化
  • 论坛网站开发 go电商扶贫网站建设
  • 个人建站教程优秀的定制网站建设
  • 农村建设集团有限公司网站下载百度极速版
  • 微信公众号个人可以做网站么做企业网站需要哪些
  • 如何用付费音乐做视频网站wordpress如何设置首页
  • 杨凯做网站网站首页 排版
  • 网站图片标签江苏省建设类高工申报网站
  • 网站建设中的英文什么网站可以做医疗设备的
  • 柳州购物网站开发设计服装网站的建设与管理
  • 做网站的上海市哪家技术好北京百姓网免费发布信息
  • 网站文章排版制作网站软件
  • 云南网站开发公司网站商城定制网站建设
  • 企业网站的新闻资讯版块有哪些肇庆自助建站模板
  • 怎么做平台网站吗为网站做seo需要什么