WP_UnitTestCase 팩토리 클래스에 대한 문서는 어디서 찾을 수 있습니까?


21

최근 버전 WP_UnitTestCase에는 $factory속성 이 포함되어 있습니다.

예를 들면 다음과 같습니다.

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

이 유용한 기능에 대한 설명서는 어디서 찾을 수 있습니까?

답변:


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팩토리를 사용 했지만 모든 팩토리에 대해서도 동일합니다.

나는 이것을 워드 프레스 문서 팀에 언급 할 것이라고 생각한다. 이 자료를 플러그인과 테마 핸드북에 넣을 수도 있습니다.

업데이트 (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 주셔서 감사합니다.
Josh Habdas

1
@JoshH 의견과 관련된 문제에 대해 진심으로 감사드립니다. 이제이 문제를 해결해야합니다. 스팸 방지 플러그인이 너무 많아서 발생했습니다.
JD

2

의 소스 코드

https://github.com/rnagle/wordpress-unit-tests/blob/master/includes/factory.php

지금 가장보기 좋은 곳인 것 같습니다


2
질문에서 링크를 제거하십시오. 항상 외부 출처에 의존하지 않는 답변을 작성하십시오. 그렇지 않으면 답변을 삭제해야합니다.
kaiser

2
@kaiser, 어디에서 왔는지 알지만 내 질문에 대한 답변은 링크입니다. 분명히 누군가가 전체 문서를 여기에 게시하지 않을 것입니까?
djb

2
예, 모든 관련 코드를 여기 에 게시해야 합니다. 이것은 사이트 FAQ에도 기록되어 있습니다 . "대상 사이트에 도달 할 수 없거나 영구적으로 오프라인 상태가되는 경우 항상 중요한 링크의 가장 관련성있는 부분을 인용하십시오." 링크 된 리소스의 전체 내용이 아닐 수도 있지만이 경우에는 그럴 수도 있습니다. 마찬가지로 GitHub 리소스에 액세스 할 수 없게되면이 답변은 의미가 없습니다.
s_ha_dum
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.