質問: ユニットテストオブジェクト用のファクトリを作成するための最善の方法は何ですか? 私はtddを習得しようとしていて、カスタムオブジェクトのためのファクトリの作成に苦労しています。たとえば、カスタムユーザータイプがあり、そのタイプのすべてのユーザーが特定の機能を持っている必要がある場合は、wp_unittestファクトリを使用してユーザーを作成し、オブジェクトを使用する前に各テストにその機能を手動で追加します。さまざまなテストファイルでこれらのオブジェクトを使用する必要があるため、各テストファイル/クラスにファクトリ関数を含めるのは冗長であり、ファクトリメソッドの4つのバリエーション(create、create_and_get、create_many)をすべて手動で実装するのは面倒です。 、およびcreate_and_get_many)。このようなユニットテストオブジェクト用のファクトリを作成するための最善の方法は何ですか?
回答: 私はあなた自身のphpunitファクトリを作成するための チュートリアルを書きました 。ただしこの場合は、既存のユーザーファクトリwp_unittest_factory_for_userを拡張するだけでよいのです。 そのクラスのソース を見ると、たくさんの異なるメソッドを実装する必要はないことがわかります。1つだけです:create_object()。それはあなたが言及した他の方法でも使われるでしょう。ユーザーファクトリのメソッドは次のようになります。function create_object( $args ) { return wp_insert_user( $args ); } とても簡単ですね。だからあなたがする必要があるのはそれをするためにそれを修正することだけですそのファクトリの子クラスを作成すること、これのようなもの:class wp_unittest_factory_for_user_with_cap extends wp_unittest_factory_for_user { function create_object( $args ) { $user_id = parent::create_object( $args ); if ( $user_id ) { $user = new wp_user( $user_id ); $user->add_cap( 'my_custom_cap' ); } return $user_id; } } それであなたはあなたのsetup()メソッドでこのようなことをすることができます:$this->factory->user_with_cap = new wp_unittest_factory_for_user_with_cap( $this->factory ); これであなたのテストでは、あなたが作成されるためにそのキャップを持ったユーザーを必要とするそれぞれの場所で$this->factory->userを$this->factory->user_with_capに置き換えることができます。別の方法としては、wp_unittestcaseの子である独自のカスタム抽象テストケースクラスを作成し、そこからすべてのテストケースを拡張することです。その後、そのクラスにファクトリメソッドを作成できます。ただし、これはすべてのテストケースを単一の親から拡張できる場合にのみ機能します。たとえば、ajaxテストがある場合はそうではないかもしれません。