Golang Go语言中的新一代测试库
项目地址 https://github.com/ysmood/got
用 golang 的朋友如果写测试的话基本都知道 testify ,但是其存在诸多多年未解决的问题,使用的体验比较原始。我在开发一个更加现代的测试框架,现在基本的框架已经成型,希望能有更多感兴趣的小伙伴能加入到项目里来改进它的特性。
这个项目没有任何依赖,非常轻量,很适合想学习 golang 的朋友阅读它的源代码,比如反射,diff 算法。
下面这个链接是和 testify 的简单比较:
Golang Go语言中的新一代测试库
更多关于Golang Go语言中的新一代测试库的实战教程也可以访问 https://www.itying.com/category-94-b0.html
star 了支持下
有闲心搞这么基础的东西的是大佬无疑了
更多关于Golang Go语言中的新一代测试库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
试试
举手🙋🏻♂️,有什么容易上手的子任务可以分给我吗?只能在业余时间开发
点进去才发现已经 Follow 过 OP 了
多谢支持
好的,我明天会先花点时间读下代码,合适的话我会申请把 issue assign 给我
OK ,有问题的话可以直接在 issue 里问。
赞
看起来不错 等会试试
goland 支持吗?
支持
谢谢 学习一下
example 在 lib 下看起来挺奇怪的
学习一下
golang 在这块没有太多规范,都是三方的。我故意没用 pkg ,因为 lib 也有图书馆的意思,所有就把文档也放里面了,主要是为了减少开发时的杂音,大部分时候开发这个项目的人不关心 example 文件,所以没必要放根目录,根目录最好是放开发时最重要的东西。
而需要读 example 的用户一般都会直接从 readme 跳转,所以也没必要放根目录。
lib 是图书馆… 一般默认 lib 都是放库的 package, 文档可以专门建一个 docs , examples 对与用这个库的人来说其实是挺重要的一个 folder.
一般代码库都是放 pkg ,既然我选择了 lib 就已经不一般了,lib 比 pkg 更宽泛,可能放很多非核心代码的东西,比如 docker 的配置,这个你如果放 pkg 就会显得特别奇怪,因为它不是 golang 代码。
我这里假设的是阅读者没有任何 golang 的经验,所有文件的唯一入口点就是 readme ,只要看了它就不会有歧义了。
不太能理解什么都往 lib 里面扔的行为,但是 stop 我说的只是个建议.
什么都往根目录里扔不是也很奇怪吗?你这个想法以前我已经权衡过很久了,目前没有足够的动力和理由让我往根目录里塞更多的东西,实际上 golang 的设计理念是代码就是文档,理论上不应该有 example 这样的东西,还是 golang 本身设计不够优秀导致的争论点。
支持一下
首先赞一下 OP 的贡献。不过 lib 虽然可以看作图书馆的缩写,但在目录结构上很少这样理解吧。根目录放 docs 等比较多,当然要区分得更开可以独立出去用单独的 example 的 repo ,这样主 repo 可以更加精简清晰。这种规划也不算 golang 特有的设计问题吧
example 本来就是一个独立的 go module ,有自己的 package name ,完全可以看作是一个独立的 lib ,这样也便于日后将其独立出去解藕。
我觉得凡事要讲道理,比如怎么做方便,更实用,而不是一味最求和别人一样。我承认放根目录可能是局部最优方案,但是我觉得放 lib 可能是全局最优方案。理由是 example 的使用频率非常低,一般人看过一次也不会再看了。而且这样也会迫使用户都从 readme 入手了解项目,保证用户不会因为不知道 docs 这种不成文的规矩而漏掉重要信息。而且可以让维护者在开发这个项目的时候减少不必要的杂音,IDE 看上去更清爽。
> 这种规划也不算 golang 特有的设计问题吧
我也没说是 golang 特有的,如果让我设计新语言,肯定是会先避开这种设计上的问题的。golang 已经向前走了很大一步了:将 example 作为 test 的一部分。只不过做的还不够完美。
在Golang(Go语言)中,测试库的发展一直受到社区和开发者的广泛关注。关于“新一代测试库”的说法,可能指的是在原有testing库基础上不断涌现的新工具和库,这些工具旨在提升测试的便捷性、可读性和效率。
Go语言的官方测试框架是testing库,它内置于标准库中,无需额外导入,提供了编写单元测试和集成测试所需的函数和类型。然而,随着Go语言生态系统的不断发展,一些新的测试库也逐渐崭露头角,它们提供了更多功能和更友好的使用体验。
其中,GoMock库可用于生成Mock对象,帮助开发者在进行单元测试时模拟外部依赖;GoConvey库则专注于编写直观易读的测试用例;而像Vegeta这样的工具,则专注于HTTP负载测试,为开发者提供了强大的性能测试能力。
不过,尽管有这些新兴的测试库,testing库仍然是Go语言测试领域的基础和核心。对于大多数Go项目来说,testing库已经足够满足需求,并且与Go语言的生态系统紧密结合。
因此,在选择使用哪个测试库时,建议开发者根据项目需求和个人偏好进行权衡。