草庐IT

模拟式

全部标签

testing - 是否可以使用 Gomega 模拟示例测试?

我有一些go测试,我想更新它们以使用Ginkgo进行BDD样式测试。问题是,服务器使用stdout和stderr进行日志记录,并且许多测试使用Go内置的“示例”测试框架,如下所示:import("fmt")funcExampleConsoleLog(){fmt.Printf("Testing%d,%d,%d:%s\n",1,2,3,"mikecheck")//Output://Testing1,2,3:mikecheck}我想使用Ginkgo和Gomega来断言这些被打印到标准输出,但没有内置的匹配器可以告诉我这样做。Gomega确实提供了一个gbytes包,但是没有关于如何将gbyt

unit-testing - 我如何在测试中模拟 Go 函数?

我在StackOverflow上阅读了一些关于如何模拟time.Now()等函数的问题。解决方案似乎是编写一个实现特定接口(interface)的结构,然后在测试中传入该模拟。有更好的方法吗?由于在Golang中没有足够好的依赖注入(inject)容器实现,我不想手动传递结构,或者创建一个内部只有这样的结构:func(sMyStruct)Now(){returntime.Now()}因为,首先,我无法测试这个函数。当你处理其中没有变量的一行时,它可能什么都不是,但我有一个连接到TCP端口的函数。做这样的事情需要我为它使用的所有东西创建适配器(例如net.Dial()、time.Now(

math - golang 中模拟钟形曲线上的值

我的数学有点初级,所以我提前为任何假设道歉。我想获取存在于模拟钟形曲线上的值。我不想实际创建钟形曲线或绘制钟形曲线,我只想使用一个函数,给定输入值可以告诉我假设的钟形曲线上相应的Y轴值。这里是完整的问题陈述:我正在生成介于0.0和1.0之间的浮点值。0.50代表钟形曲线上的2.0,也就是最大值。0.50的值开始在此钟形曲线上下降,因此例如0.40和0.60是相同的,可能类似于1.8。为这个例子任意选择了1.8,我想知道如何调整这个“梯度”。现在我正在做一个非常粗略的实现,例如,对于任何>0.40和关于如何在Go中实现这一点的任何想法 最佳答案

unit-testing - 如何在向 API 发送 http 请求时进行模拟

我已经使用go-gin在Go中实现了一个ReSTAPI,我正在尝试测试一个如下所示的处理函数funceditNameHandler(c*gin.Context){//makeaReSTcalltoanotherservercallToAnotherServer()c.Status(200)}我想模拟callToAnotherServer方法,以便我的测试用例根本不调用第3方服务器。我的测试用例看起来像funcTestSeriveIdStatusRestorePatch(t*testing.T){//Requestbodysend:=strings.NewReader(`{"name":

unit-testing - 如何在 Golang 中正确模拟具有成员函数的结构?

我有两个结构:FunctionalityClient和TestClient,它们都实现了Interface。我有一个Interface类型的全局变量Client。我将实际客户端或模拟客户端分配给Client,具体取决于它是测试还是正常运行。Interface有一个方法Request我想在测试中模拟它。也就是说,我想:记录传递给函数的参数是什么从函数返回一些任意定义的返回值所以结构看起来像这样:typeTestClientstruct{recordedArgs[]interface{}returnValues[]interface{}}func(c*TestClient)Request(

go - golang中函数范围的模拟

PHP中的范围http://php.net/manual/en/function.range.php要创建这样的数组,需要使用slice吗?我只知道使用slice和loopfor的方法,但是否有另一种更有效的方法? 最佳答案 在golang中,只有一种迭代结构,那就是for循环。有多种方法可以配置for循环本身,但总的来说只有一种构造:https://tour.golang.org/flowcontrol/1https://play.golang.org/p/wBSGJqHuLKTheCmethod--fori:=0;i

go - 当我尝试模拟扇入时陷入僵局 - 通过阶乘计算扇出

我正在尝试具有阶乘问题的扇入-扇出模式。但我得到:fatalerror:allgoroutinesareasleep-deadlock!无法确定死锁的原因。我正在尝试使用扇入扇出模式同时计算100个数字的阶乘。packagemainimport("fmt")funcmain(){_inChannel:=_inListener(generator())forval:=range_inChannel{fmt.Print(val,"--")}}funcgenerator()chanint{//NEEDTOCALCULATEFACTORIALFOR100NUMBERSch:=make(chan

go - 如何模拟第二次尝试 http 调用?

作为我第一个项目的一部分,我正在创建一个小型库来向任何用户发送短信。如果第一次没有收到肯定状态,我已经添加了等待和重试的逻辑。这是对短信发送服务的基本HTTP调用。我的算法看起来像这样(注释会解释代码的流程):for{//sendrequestresp,err:=HTTPClient.Do(req)checkOK,checkSuccessUrl,checkErr:=CheckSuccessStatus(resp,err)//ifsuccessfuldon'tcontinueif!checkOKandcheckErr!=nil{err=checkErrreturnresp,SUCCESS

unit-testing - 如何定义模拟方法被调用零次

我正在尝试测试以下方法://AuthenticationMiddlewareMiddlewarewhichhandlesalloftheauthentication.funcAuthenticationMiddleware(contextcontext.ContextIntf,wweb.ResponseWriter,r*web.Request,nextweb.NextMiddlewareFunc){//Checkifurlisonethatdoesn'tneedauthorization.Ifnotthansendthemtotheloginpage.for_,url:=rangeAu

go - 用模拟编写单元测试

我在里面写了一个RESTapi。现在我想通过隔离不同的组件来对其进行单元测试。项目结构如下所示,有两个主要包├──main.go├──routes│├──routes.go│└──routes_test.go├──db│└──db.goma​​in.go:项目的主要入口点routes/routes.go:HTTP路由处理包db/db.go:数据库处理器包现在,当我测试http路由时,我只想测试请求是否被路由到正确的处理程序函数,然后它们会做出相应的响应。在实际应用程序中,处理函数实际上会插入/更新数据库,但我不想在测试时这样做。因此,如果我可以模拟一个数据库对象并使我的处理程序函数针对