WP_UnitTestCase
已包含$factory
属性。 例如:
$post = $this->factory->post->create();
在哪里可以找到有关此有用功能的文档?
#1 楼
据我所知,目前没有任何文档。官方资源在这里。我还编写了有关WordPress单元测试的教程,其中提供了有关此功能的一些详细信息。
优点之一使用
WP_UnitTestCase
的工厂是其工厂。可以通过
factory
成员变量进行访问。 factory
是一个对象,其属性每个都是include / factory.php中定义的类之一的实例。
你问他们做什么?它们使您可以在任何需要测试的地方轻松创建用户,
帖子,术语等。因此,代替执行此操作的
:
$args = array( /* A bunch of user data you had to make up */ );
wp_insert_user( $args );
您可以执行以下操作:
$user_id = $this->factory->user->create();
>但是,等等,情况会变得更好。如果您需要许多用户
(或帖子,或其他)怎么办?您可以像这样批量创建它们:
$user_ids = $this->factory->user->create_many( 25 );
这将创建25个可在测试中使用的用户。
factory
具有以下可使用的属性:$post
$attachment
$comment
$user
$term
$category
$tag
$blog
它们的使用方式与上述示例中
$user
的工厂所使用的方式相同。例如,您可以像这样创建帖子:
$this->factory->post->create();
您还可以指定用于创建
对象的特定参数。在上面的示例中,我们创建了一个帖子,但是没有将其分配给特定用户(
post_author
字段默认为0
)。有时我们可能希望将帖子分配给用户。我们会这样:
$user_id = $this->factory->user->create();
$post_id = $this->factory->post->create( array( 'post_author' => $user_id ) );
另外,如果您不仅需要您正在创建的对象的ID
,无需执行以下操作:
$post_id = $this->factory->post->create();
$post = get_post( $post_id );
而是使用
create_and_get()
方法:// $post will be an instance of WP_Post
$post = $this->factory->post->create_and_get();
在此示例中,我们使用了
post
工厂,但对于所有工厂来说都是一样。br />
我想我会在WordPress文档小组中提及这一点。也许我们可以把这些东西放到插件和主题手册中。
更新(2015年6月20日):您还可以创建自己的自定义工厂!
更新(9月27日) ,2016年):在WordPress 4.4中,对测试进行了更新,以提供用于访问工厂的静态
factory()
方法,尽管仍然通过魔术获取器提供了factory
属性。#2 楼
https://github.com/rnagle/wordpress-unit-tests/blob/master/includes/factory.php
的源代码似乎是最好的看的地方
评论
只需从您的问题中删除链接:您会读到什么?请始终写出不依赖外部资源的答案。否则,我们将需要删除您的答案。
– kaiser
2014年3月25日12:55
@kaiser,我知道您来自哪里,但对我的问题的答案将是链接。您肯定不会期望有人在此处发布整个文档吗?
– djb
2014年3月25日14:27在
是的,我们希望有人在这里发布所有相关代码。甚至将其写到站点FAQ中:“如果目标站点无法访问或永久脱机,请始终引用重要链接中最相关的部分。”那可能不是链接资源的全部内容,但在这种情况下可能是全部。照原样,当该GitHub资源变得不可访问时,此答案变得毫无意义。
– s_ha_dum
2014年3月25日16:26
评论
域已失效,本教程的链接也已失效。它被移动了吗?
–乔什·哈布达斯(Josh Habdas)
17年5月16日在2:58
@JoshH它似乎现在正在备份。您可能在站点在深夜(我的时区)运行备份时命中了它。
– J.D.
17年5月16日在11:19
@JoshH我不知道任何使用过程代码进行测试的单元测试框架。我真的怀疑过程测试框架是否会和OO一样好用,仅仅是因为它需要如何工作。但是,仅仅因为测试建立在像PHPUnit这样的面向对象的框架上,并不意味着它们只能测试OO代码。我的插件有很多程序代码,并以完全相同的方式对其进行测试。 WordPress还以这种方式测试了很多程序代码。所以应该没问题。
– J.D.
17年5月17日在11:29
谢谢@ J.D。理想情况下,我也想以这种方式编写测试。但是我会向OOP提交,因为它不在主要代码行中。附言我尝试在您的博客上提交评论,但收到一个错误。不管怎样,感谢411。
–乔什·哈布达斯(Josh Habdas)
17年5月17日在11:33
@JoshH感谢您对有关问题的评论,现在应该解决此问题。这是由过度的反垃圾邮件插件引起的。
– J.D.
17年5月17日在12:16