首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    何在 Go 函数获取调用者的函数名、文件名、行号...

    背景 我们在应用程序的代码添加业务日志的时候,不论是什么级别的日志,除了我们主动传给 Logger 让它记录的信息外,这行日志是由哪个函数打印的、所在的位置也是非常重要的信息,不然排查问题的时候很有可能就犹如大海捞针...对于在记录日志时记录调用 Logger 方法的调用者的函数名、行号这些信息。...、该调用在文件的行号。...获取调用者的函数名 runtime.Caller 返回值第一个返回值是一个调用栈标识,通过它我们能拿到调用栈的函数信息 *runtime.Func,再进一步获取到调用者的函数名字,这里面会用到的函数和方法如下...真正要实现日志门面之类的类库的时候,可能是会有几层封装,想在日志里记录的调用者信息应该是业务代码打日志的位置,这时要向上回溯的层数肯定就不是 1 这么简单了,具体跳过几层要看实现的日志门面具体的封装情况

    6.5K20

    提高代码质量——使用Jest和Sinon给已有的代码添加单元测试

    Sinon.js是一个用来做独立测试和模拟的JavaScript库。它在单元测试的编写通常用来模拟HTTP等相关请求。...它能满足日常的普通需求utils工具集的测试,也能够配置Sinon.js来进行HTTP模拟测试。...而对于其他的测试框架:Mocha或者Chai等,没有进行具体的了解,因此在这里不多做评价。 如何配置Jest与Sinon.js,从而编写单元测试?...在Sinon.js的文档,有专门关于XMLHttpRequest对象的模拟的章节,在下一章,我们将会针对项目中sinon.js的使用进行简单的介绍。...expect(callback.mock.calls[0][0]).toBe('hjava'); // 判断了callback函数的第一次被调用的第一个参数为'hjava' }); 从上面的示例我们可以看到

    3.8K00

    如何模拟一个XMLHttpRequest请求用于单元测试——nise源码阅读与分析

    Sinon引用的HTTP模拟框架nise。...它是Sinon.js的一部分,用来处理HTTP相关测试问题。 该库提供了替换原生的XHR对象和Server相关的接口,但是我们在本文中只介绍关于XHR部分,也就是浏览器的XHR对象的替换。...useFakeXMLHttpRequest: useFakeXMLHttpRequest //调用后,使用fake XHR对象替换全局,并返回一个带有restore方法的fake XHR对象构造函数...在测试完成后,我们再调用返回的restore方法,这样我们就恢复了原生的XHR对象。 返回的模拟HXR对象还有部分API接口可以调用,这部分我们将在下一节——nise结构中进行介绍。...nise结构 构造函数——FakeXmlHttpRequest // 构造函数,用来存储请求相关的数据请求状态、请求头等 function FakeXMLHttpRequest(config) {

    2.5K10

    C语言与汇编的嵌入式编程:main模拟函数调用(两数交换)

    编写一个两数交换函数swap,具体代码如下: #include void swap(int *p1,int *p2) { int temp; temp = *p1;...push edx call printf add esp,12 } } 现在需要将swap也转化为汇编,并放入main函数...,具体思路如下: 1、先对swap函数反汇编,并删除ret指令, 注明:swap函数大致处理过程为:把下个地址压入堆栈,然后参数入栈,然后把所有寄存器压入堆栈,分配空间,空间清C然后变量赋值开始程序然后做堆栈平衡清理堆栈...所以删除swap:和ret后,main里面不再是一个完整的函数,但是又保留了该swap函数的基本功能(即,把下个地址压入堆栈,然后参数入栈,然后把所有寄存器压入堆栈,分配空间,空间清C然后变量赋值开始程序然后做堆栈平衡清理堆栈...2、将1的汇编代码替换掉call swap, #include main(){ int a=0; int b=0; char *str1="a=%d,b=%

    97240

    单元测试初体验

    将用于解析files和exclude定义的所有相对路径的根路径位置。如果basePath的配置是一个相对路径,那么它将被解析到__dirname的配置文件。...expect 和 should是 BDD 风格的,二者使用相同的链式语言来组织断言,但不同在于他们初始化断言的方式:expect 使用构造函数来创建断言对象实例,而 should 通过为 Object.prototype...sinon.js spy 主要用来监视函数调用情况,sinon 对待监视的函数进行 wrap 包装,因此可以通过它清楚的知道,该函数调用过几次,传入什么参数返回什么结果,甚至是抛出的异常情况。...它拥有 spy 提供的所有功能,区别在于它会完全替换掉目标函数,而不只是记录函数调用信息。换句话说,当使用 spy 时,原函数还会继续执行,但使用 stub 时就不会。...如果你曾经听过“mock 对象”这种说法,这其实是一码事 —— Sinon 的 mock 可以用来替换整个对象以改变其行为,就像函数 stub 一样。

    1.6K20

    使用mocha编写node服务单元测试

    可以看到上述代码定义了一个describe组来测试getResult函数的功能,里面有两个测试用例分别测试了入参正常和非法入参的情况。 而测试用例如何来判断函数是否正常执行呢?...异步逻辑 上述的单测例子里,被测试的函数只有同步逻辑,而在js,异步逻辑无处不在。那么对于异步逻辑需要怎么测试呢?...例如当我们需要对一个删除数据的接口进行测试时,我们不能真的去执行数据库删除操作来判断函数是否正常执行。这时候就需要引入sinon来帮助我们替换掉这些难以模拟的逻辑。...sinon库提供了三种功能:spies、stub和mock。 spies spies功能顾名思义就是间谍函数,它能帮助我们去收集被监听函数的有关调用信息。...我们也可以让替换函数主动抛出错误,来测试调用它的函数是否可以正确处理异常: it('测试db操作失败', async function(){ const stub = sinon.stub(db,

    4K20

    前端测试驱动开发模式(TDD)快速入门

    主要用来mock一些东西,比如可以用sinon mock一个假的函数sinon也可以返回这个函数执行与否。...js文件,在文件的引入这些工具,为了连接sinon 和 chai,要使用到sinon-chai const chai = require("chai") const sinon = require("...(badFn, 'this.commonDirectFn is not a function') // 再把包装后的函数传入throws }) 复制代码 使用sinon模拟函数 如果需要模拟一个函数...,可以用sinon模拟,使用方法:sinon.fake(),并且课已通过这个sinon的called方法判断函数是否被执行。...let fn = sinon.fake() //生成一个模拟函数 assert(fn.called) //断言这个函数是否被执行 复制代码 小结 本文只是对Tdd的一个简单介绍,适用于快速入门。

    2.5K20

    【Web技术】639- Web前端单元测试到底要怎么写?

    设计模式与结构分析 在这个场景设计开发,我们严格遵守 redux 单向数据流 与 react-redux 的最佳实践,并采用 redux-saga 来处理业务流, reselect 来处理状态缓存,通过...中间 store 的内容都是 redux 相关的,看名称应该都能知道意思了。 具体的代码请看这里:https://github.com/deepfunc/react-test-demo。...saga 是一种 es6 的生成器函数 - Generator ,我们利用他来产生各种声明式的 effects ,由 redux-saga 引擎来消化处理,推动业务进行。...这个测试用例的步骤就是利用生成器函数一步步的产生下一个 effect ,然后断言比较。 从上面的注释 3、4 可以看到, redux-saga 还提供了一些辅助函数来方便的处理分支断点。.../get-table', payload)).toBe(true); }); }); 由于 api 层直接调用了工具库,所以这里用 sinon.stub() 来替换工具库达到测试目的。

    3.1K30

    分享7个专业级的JavaScript测试库,提高你的工作效率

    这些库在各自的领域中都有出色的表现,单元测试、功能测试、模拟、集成测试和突变测试等。通过本文的介绍,我希望你能更深入地了解这些库,找到适合你项目的测试工具。...2、Sinon 这是一个独立的库,用于在JavaScript测试创建测试替身(侦查、桩和模拟)。它通过提供工具来验证函数调用、控制行为等,帮助你编写隔离的测试。...步骤定义是用JavaScript编写的函数,这些函数会被Cucumber用来执行功能文件的每一步。...(); // 使模拟函数调用时返回特定的值 td.when(mockFunction('hello')).thenReturn('world'); // 现在,当你调用 mockFunction(...', 'method2']); // 使模拟对象的方法在调用时返回特定的值 td.when(mockObject.method1()).thenReturn('hello'); // 现在,当你调用

    30320

    对 React 组件进行单元测试

    ', function() { ... }); ... }); spy 正如 spy 字面的意思一样,我们用这种“间谍”来“监视”函数调用情况 通过对监视的函数进行包装,可以通过它清楚的知道该函数调用过几次...一般使用 Enzyme 的 mount 或 shallow 方法,将目标组件转化为一个 ReactWrapper对象,并在测试调用其各种方法: import Enzyme,{ mount } from...(function coverage):是否每个函数调用了 行覆盖率(line coverage):是否每一行都执行了 测试结果根据覆盖率被分为“绿色、黄色、红色”三种,应该视具体情况尽量提高相应模块的测试覆盖率...; }); ... }); 调用组件的“私有”方法 对于一些组件,如果希望在测试阶段调用到其一些内部方法,又不想对原组件改动过大的,可以用instance()取得组件类实例...sinon 中有一些模拟 XMLHttpRequest 请求的方法, jest 也有一些第三方的库解决 fetch 的测试; 在我们的项目中,根据实际的用法,自己实现一个类来模拟请求的响应: //FakeFetch.jsimport

    4.3K40

    使用Enzyme测试React(Native)组件|洞见

    ,在下面的示例,我们可以通过React组件构造函数的引用找到该组件,也可以基于React的displayName来查找组件。...对于浅渲染来说,事件模拟并不会像真实环境中所预期的那样进行传播,因此我们必须在一个已经设置好了事件处理方法的实际节点上调用,实际上.simulate()方法将会根据模拟的事件触发这个组件的prop。...则是一个可以用来Mock和Stub数据代码的第三方测试工具库,当我们需要检查一个组件当中某个特定的函数是否被调用时,我们可以使用sinon.spy()方法监视所传入该组件作为prop的onButtonClick...方法,然后再通过wrapper的simulate方法模拟一个Click事件,最终验证这个被spy的onButtonClick函数是否被调用。...(Jenkins、Travis CI)运行单元测试的时候。

    2.4K40

    Vue2的单元测试与调试技术

    测试是一个非常美妙的世界,一旦进入根本停不下来~在Java,我们可以使用JUnit做单元测试,但在前端开发,想做单元测试并不是一件特别容易的事情,但如果你采用angularjs,react或Vue这类的前端技术...: 实际做单元测试并没有像上次这么简单,你可能需要模拟Ajax请求,模拟点击事件,模拟触发事件等,是否符合预想的效果,一般来说,单元测试做功能测试比较多,对于样式,利用Vue的“所见即所得”调试已经足够方便...sinonsinon将测试替身分为3种类型: Spies:模拟一个函数实现,检测函数调用的信息; Stubs:与Spies类似,但完全替换目标函数; Mocks:通过组合Spies和Stubs,使替换一个完整对象更容易...vue属性等,非常方便哦~在编写单元测试时,要往组件传入属性值使用的不是props而是propsData哦,当组件有异步操作时,比如data重新设置值,我们应该使用Vue.nextTick函数在回调函数处理...$el拿到当前dom树,通过querySelector来筛选出对应的节点,并向这个dom节点调用dispathEvent函数即可,在处理用户输入时,做单元测试,并不需要模拟输入,而是将对应的绑定的v-model

    1.2K100

    用 jest 单元测试改善老旧的 Backbone.js 项目

    Backbone 的请求,包括 Backbone.sync / model.fetch() 等, 本质上还是调用的 jQuery 的 $.ajax 方法(默认情况下),也就是传统的 xhr 方式,使用...sinon 就可以很好的胜任这种暗度陈仓的工作: it('should fetch from server', function(){ //模拟的返回数据 const server = sinon.createFakeServer...另一个难点在于,Backbone.View 的 constructor / initialize “构造函数,并不能接受自定义的 props 参数。...$el.find('.multi').length).toEqual(0); }); 对方法调用的测试 自然还是用 sinon 来做: it('应正确响应事件回调并加载子模板', function()...{ //模拟的返回数据 const server = sinon.createFakeServer(); server.respondImmediately = true; //立即返回

    3.5K10

    15 个常见的 Node.js 面试问题及答案

    所有 EventEmitter 类都可以使用 eventEmitter.on() 函数将事件侦听器附加到事件。然后一旦捕捉到这样的事件,就会同步地逐个调用它的侦听器。...readFile 函数异步读取文件的全部内容,并存储在内存,然后再传递给用户。 createReadStream 使用一个可读的流,逐块读取文件,而不是全部存储在内存。...传递给 setImmediate 函数的回调将在事件队列上的下一次迭代执行。 另一方面,回调传递给 process.nextTick 在下一次迭代之前以及程序当前运行的操作完成之后执行。...例如,如果正在测试的组件在预期测试的部分之前有一个文件读取操作,则可以使用 stub 来模拟该行为并返回模拟内容,而不用实际读取文件。...在 Node.js ,我们使用像 Sinon 这样的库来实现(译者注,Sinon 在测试替换某部分代码,减少测试项编写的复杂度 https://sinonjs.org)。 14.

    1.8K20

    【Node.js】1430- 15 个常见的 Node.js 面试问题及答案

    所有 EventEmitter 类都可以使用 eventEmitter.on() 函数将事件侦听器附加到事件。然后一旦捕捉到这样的事件,就会同步地逐个调用它的侦听器。...readFile 函数异步读取文件的全部内容,并存储在内存,然后再传递给用户。 createReadStream 使用一个可读的流,逐块读取文件,而不是全部存储在内存。...传递给 setImmediate 函数的回调将在事件队列上的下一次迭代执行。 另一方面,回调传递给 process.nextTick 在下一次迭代之前以及程序当前运行的操作完成之后执行。...例如,如果正在测试的组件在预期测试的部分之前有一个文件读取操作,则可以使用 stub 来模拟该行为并返回模拟内容,而不用实际读取文件。...在 Node.js ,我们使用像 Sinon 这样的库来实现(译者注,Sinon 在测试替换某部分代码,减少测试项编写的复杂度 https://sinonjs.org)。 14.

    1.8K20

    实例入门 Vue.js 单元测试

    ', function() { ... }); ... }); 1.6 spy 正如 spy 字面的意思一样,我们用这种“间谍”来“监视”函数调用情况 通过对监视的函数进行包装,...可以通过它清楚的知道该函数调用过几次、传入什么参数、返回什么结果,甚至是抛出的异常情况。...,用一个虚拟的对象来创建以便测试的测试方法 广义的讲,以上的 spy 和 stub 等,以及一些对模块的模拟,对 ajax 返回值的模拟、对 timer 的模拟,都叫做 mock 。...(function coverage):是否每个函数调用了 行覆盖率(line coverage):是否每一行都执行了 测试结果根据覆盖率被分为“绿色、黄色、红色”三种,应该关注这些指标,测试越全面,...一般使用其 mount() 或 shallowMount() 方法,将目标组件转化为一个 Wrapper 对象,并在测试调用其各种方法,例如: import { mount } from '@vue/

    2.9K20
    领券