我已经根据我的需求扩展了以下代码。https://github.com/radovskyb/watcher/blob/master/example/basics/main.go
此代码的目的是监视某些事件(创建、写入),并在此基础上采取适当的操作。为了测试这段代码,我使用了Ginkgo和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
}
}
}()我检查了一下,Gomega支持异步测试,支持"Channel“,但我尝试了几件事,但最终还是初始化了新的watcher对象,需要触发实际的事件才能进行测试。我试图创建"tempDir“,这样我就可以触发CRETE / WRITE事件,然后关闭通道,但它没有帮助,在运行这个特定的测试之后,它只是等待通道关闭。
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发布于 2021-01-06 19:22:41
测试的类型很少
单元测试
此方法测试单个代码。例如函数或甚至函数的一部分。
视角:功能用户(开发人员)
行为测试
这只是黑盒测试,你测试整个功能(有时是部分功能)的行为。
视角:模块用户
端到端测试
这是在测试整个程序工作流程。
视角:程序用户
当然,还有更多的测试类型,但这3种测试类型将向您展示一个基本的区别。
前两个测试类型需要有一些可以在代码中重用的模块。这意味着,您可以在实际的生产代码和测试场景中使用此模块。
测试看起来像这样:
写入测试并运行测试函数(传递参数和抓取结果) -> ->结果。
第三个步骤就是编写程序,编译并启动它,检查所有步骤,验证它们是否正常。
您的代码在测试方面非常糟糕。您不能重用代码的任何部分,因为main函数中包含了所有内容。
因此,测试过程如下所示:
编译程序->运行程序(带一些参数) ->与程序交互->抓取输出->分析收集的输出。
因此,测试代码的解决方案就是重构它。要学习编写可测试代码,前面还有很长的路要走。
为了提高你的技能,你可以参考一些开源代码。
但我的建议是,你可以买下这本书然后写出来。这将向您展示可测试代码的基础知识。书是令人惊叹的,这在IT世界是经典的。
书:
Test Driven Development
by Kent Beck
ISBN 13: 9780321146533
ISBN 10: 0321146530https://stackoverflow.com/questions/65593709
复制相似问题