在构建插件时需要对哪些方面进行单元测试?

时间:2016-12-18 作者:Siddharth Thevaril

我是一个插件开发人员,完全没有行业经验。我创建了一个简单的插件,可以通过metabox向一篇文章添加多个贡献者。

我搜索了很多网站,我知道我需要wp-cliPHPUnit 执行单元测试,但我不知道要测试什么,测试要包含或排除哪些函数/挂钩,需要采取哪些预防措施,以及如何将虚拟用户数据提供给测试。

这里有人能指导我完成这个过程吗?

2 个回复
最合适的回答,由SO网友:J.D. 整理而成

测试类型首先,请注意WordPress中的“单元测试”通常超出了单元测试,更像是功能/集成测试。这更多的是技术上的差异,但如果您理解这些不同事物之间的差异,您有时可能会对WordPress“单元”如何测试事物感到困惑。

当你问应该测试插件的哪些部分时,最好是测试所有插件。但至于您应该对哪些部分进行单元(或集成)测试,以及您应该对哪些部分使用验收测试,则是另一回事。

目前,对于我的插件,我使用两个不同的测试层:“PHPUnit的单元”测试,以及通过WP Browser. 单元测试测试内部逻辑,而验收测试检查用户使用插件的UI时,它是否实际工作。

测试单元测试的内容包括:

修改数据库中的值的代码,用于执行计算的代码,包含其他逻辑的代码,基本上是指任何传递值的函数,它会执行类似操作,和/或向您返回一些值。

要测试这类代码,您需要编写一个调用相关函数的测试,传递特定的值,然后断言返回的结果是您所期望的结果。或者,对于修改数据库的函数,您可以断言数据库包含调用函数后预期的值。

不要测试那些难以进行单元测试的代码,有些人可能会认为不应该进行单元测试,这些代码基本上只是用于将内容输出到浏览器中。这就是验收测试的目的。

此外,由于您提到了操作/过滤器,听起来您可能想知道是否应该测试一个函数是否连接到正确的操作,或者在WordPress调用该过滤器时是否实际应用了一个连接到过滤器的函数。这可能需要,也可能不需要,具体取决于所讨论的操作或筛选器。一般来说,我不测试这类东西,因为它通常更适合功能/验收测试(虽然验收测试只是间接测试)。

因此,基本上,单元测试逻辑和数据库方法,验收测试插件的实际UI。当然,为了使其正常工作,您需要将模板/输出代码与其他逻辑基本分开,这通常是一个好主意。

在您的情况下,您可能会发现验收测试对您的插件更为有用,而实际上并不需要单元测试,因为大多数内容都已经通过验收测试进行了测试。然而,两者兼备通常是理想的。

SO网友:montrealist

我要说的是,在WordPress中,单元测试并不是唯一值得研究的东西:功能/集成/验收测试(您选择与您的情况更相关的类型)也很重要,主要是因为它是一个生态系统,验证您的代码是否与其他组件一起工作很重要(而且,作为奖励,甚至与一些主要插件,如WooCommerce、Yoast SEO等)。

对于以上所有内容(包括单元测试,但不是强制性的),我个人发现Codeception是一个简单的入门工具。Luca正在与他的wp-browser Codeception的扩展等。他还有一个excellent blog 解释了很多。