使用银杏和Gomega进行异步测试

使用银杏和Gomega进行异步测试,go,testing,ginkgo,gomega,Go,Testing,Ginkgo,Gomega,我已经根据我的要求扩展了以下代码 此代码的目的是监视某些事件(创建、写入)并在此基础上采取适当的操作。为了测试这段代码,我正在使用银杏和Gomega,这就是我寻求帮助的地方 我试图测试下面的代码和平(也提供了链接),我不知道我应该如何继续 go func() { for { select { case event := <-w.Event: fmt.Println(event) // P

我已经根据我的要求扩展了以下代码

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

我试图测试下面的代码和平(也提供了链接),我不知道我应该如何继续

    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
            }
        }
    }()
go func(){
为了{
挑选{

案例事件:=测试类型很少

单元测试 此方法测试单个代码。例如函数或函数的一部分。
透视图:函数用户(开发人员)

行为测试 这只是黑盒测试,您可以测试整个功能的行为(有时是其中的一部分)。
透视图:模块用户

端到端测试 这是对整个程序工作流的测试。
透视图:程序用户


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

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

测试看起来像:

写测试->运行测试函数(传递参数和抓取结果)->验证结果


第三个步骤是编译并启动程序,完成所有步骤并验证它们是否正常

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

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

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


所以,测试代码的解决方案就是重构代码。学习编写可测试代码还有很长的路要走

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

但我的建议是,你们可以买这本书并编写它。这将向你们展示可测试代码的基本知识。这本书令人惊叹,这是it界的经典之作

书籍:

                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
Test Driven Development 
   by Kent Beck 
ISBN 13: 9780321146533
ISBN 10: 0321146530