在哪里可以找到WP_UnitTestCase工厂类的文档?


21

在最新版本中WP_UnitTestCase已包含一个$factory属性。

例如:

$post = $this->factory->post->create();

在哪里可以找到有关此有用功能的文档?

Answers:


26

据我所知,目前尚无文档。该官方消息是在这里

我还编写了有关单元测试WordPress插件的教程,其中提供了有关此功能的一些详细信息

使用WP_UnitTestCase它的优点之一是工厂。这些可以通过factory成员变量访问。的 factory是与处于定义的类中的一个的每一个实例属性的对象包括/ 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工厂,但是所有工厂都是如此。

我想我会向WordPress文档团队提及这一点。也许我们可以将这些东西放入插件和主题手册中。

更新(2015年6月20日):您还可以创建自己的定制工厂

更新(2016年9月27日):在WordPress 4.4中,对测试进行了更新,以提供factory()用于访问工厂的静态方法,尽管该factory属性仍是通过魔术吸气剂提供的。


域已失效,本教程的链接也已失效。它被移动了吗?
Josh Habdas '17

@JoshH它似乎现在正在备份。您可能在站点在深夜(我的时区)运行备份时命中了它。
JD

@JoshH我不知道任何使用过程代码进行测试的单元测试框架。我真的怀疑过程测试框架是否会和OO一样好用,仅仅是因为它需要如何工作。但是,仅仅因为测试建立在像PHPUnit这样的面向对象的框架上,并不表示它们只能测试OO代码。我的插件有很多程序代码,并以完全相同的方式对其进行测试。WordPress还以这种方式测试了很多程序代码。所以应该没问题。
JD

谢谢@JD,我也很想以这种方式编写测试。但是我会向OOP提交,因为它不在主要代码行中。附言:我试图在您的博客上发表评论,但收到一个错误。面对斜视无论如何,感谢411
乔希Habdas

1
@JoshH感谢您对有关问题的评论,现在应该解决此问题。这是由过度的反垃圾邮件插件引起的。
JD

2

2
只需从您的问题中删除链接:您将读到什么?请始终写出不依赖外部资源的答案。否则,我们需要删除您的答案。
kaiser 2014年

2
@kaiser,我知道您来自哪里,但我的问题的答案将是链接。您肯定不会期望有人在此处发布整个文档吗?
2014年

2
是的,我们希望有人在这里发布所有相关代码。 甚至可以将其写入网站常见问题解答中,“如果目标网站无法访问或永久脱机,请始终引用重要链接中最相关的部分。” 那可能不是链接资源的全部内容,但在这种情况下可能是全部。照原样,当该GitHub资源变得不可访问时,此答案变得毫无意义。
s_ha_dum
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.