首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Gingko和Gomega进行异步测试

使用Gingko和Gomega进行异步测试
EN

Stack Overflow用户
提问于 2021-01-06 18:02:54
回答 1查看 246关注 0票数 0

我已经根据我的需求扩展了以下代码。https://github.com/radovskyb/watcher/blob/master/example/basics/main.go

此代码的目的是监视某些事件(创建、写入),并在此基础上采取适当的操作。为了测试这段代码,我使用了Ginkgo和Gomega,这就是我寻求帮助的地方。

我正在尝试测试下面的代码和平(也在链接中提供),我不确定我应该如何继续。

代码语言:javascript
复制
    go func() {
        for {
            select {
            case event := <-w.Event:
                fmt.Println(event) // Print the event's info.
            case err := <-w.Error:
                log.Fatalln(err)
            case <-w.Closed:
                return
            }
        }
    }()

我检查了一下,Gomega支持异步测试,支持"Channel“,但我尝试了几件事,但最终还是初始化了新的watcher对象,需要触发实际的事件才能进行测试。我试图创建"tempDir“,这样我就可以触发CRETE / WRITE事件,然后关闭通道,但它没有帮助,在运行这个特定的测试之后,它只是等待通道关闭。

代码语言:javascript
复制
                w := watcher.New()
                w.FilterOps(watcher.Create, watcher.Write)

                dir, err := ioutil.TempDir("", "watcher2")
                Expect(err).To(BeNil())

                defer os.RemoveAll(dir)
                tmpfile := filepath.Join(dir, "watcherremoved")

                err = ioutil.WriteFile(tmpfile, []byte("init"), 0666)
                Expect(err).To(BeNil())

                event := <-w.Event
                Eventually(event.Path).Should(Equal(ADMIN_VAULT))
            
                <-w.Closed
EN

回答 1

Stack Overflow用户

发布于 2021-01-06 19:22:41

测试的类型很少

单元测试

此方法测试单个代码。例如函数或甚至函数的一部分。

视角:功能用户(开发人员)

行为测试

这只是黑盒测试,你测试整个功能(有时是部分功能)的行为。

视角:模块用户

端到端测试

这是在测试整个程序工作流程。

视角:程序用户

当然,还有更多的测试类型,但这3种测试类型将向您展示一个基本的区别。

前两个测试类型需要有一些可以在代码中重用的模块。这意味着,您可以在实际的生产代码和测试场景中使用此模块。

测试看起来像这样:

写入测试并运行测试函数(传递参数和抓取结果) -> ->结果。

第三个步骤就是编写程序,编译并启动它,检查所有步骤,验证它们是否正常。

您的代码在测试方面非常糟糕。您不能重用代码的任何部分,因为main函数中包含了所有内容。

因此,测试过程如下所示:

编译程序->运行程序(带一些参数) ->与程序交互->抓取输出->分析收集的输出。

因此,测试代码的解决方案就是重构它。要学习编写可测试代码,前面还有很长的路要走。

为了提高你的技能,你可以参考一些开源代码。

但我的建议是,你可以买下这本书然后写出来。这将向您展示可测试代码的基础知识。书是令人惊叹的,这在IT世界是经典的。

书:

代码语言:javascript
复制
Test Driven Development 
   by Kent Beck 
ISBN 13: 9780321146533
ISBN 10: 0321146530
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65593709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档