Edited at

CodeceptionのAcceptanceでテストメソッド前後に指定の処理を実行する

More than 1 year has passed since last update.

Cestを利用したAcceptanceテストでテストメソッド前後に処理を追加したい場合、_before(),_after()を使用しますが、ログインやログアウトなど特定のテストメソッドの前後だけに処理を追加したい場合、前・後処理用のメソッドを用意し、メソッド名をアノテーションで設定することで実現できます。


前・後処理用メソッドの記述方法

前・後処理用のメソッドは、

protected function before1(AcceptanceTester $I)

{
// 実行したい処理
}

このようにprotectedで作成します。publicで作成すると、テストメソッドとみなされてしまいますので注意してください。


特定の前・後処理の追加方法

追加したいメソッドにアノテーションを追加することで設定できます。

/**

* @before before1
* @after after1
*/

public function fooTest(AcceptanceTester $I)
{
// テスト処理
}

特定の前処理を追加したい場合は、@beforeアノテーションに実行したい処理のメソッド名を、後処理を追加したい場合は、@afterアノテーションに実行したい処理のメソッド名を記述します。


実行順序

例として以下のテストを作成します。


test/acceptance/HogeCest.php

<?php

class HogeTestCest
{
public function _before(AcceptanceTester $I)
{
codecept_debug('_before');
}

public function _after(AcceptanceTester $I)
{
codecept_debug('_after');
}

/**
* アノテーションなし
*/

public function hogeTest(AcceptanceTester $I)
{
$I->wantToTest('hogeTest');
codecept_debug('hogeTest');
}

/**
* @before before1
* @after after1
*/

public function fooTest(AcceptanceTester $I)
{
$I->wantToTest('fooTest');
codecept_debug('fooTest');
}

/**
* @before before1
* @before before2
* @after after1
* @after after2
*/

public function barTest(AcceptanceTester $I)
{
$I->wantToTest('barTest');
codecept_debug('barTest');
}

protected function before1(AcceptanceTester $I)
{
codecept_debug('before1');
}

protected function before2(AcceptanceTester $I)
{
codecept_debug('before2');
}

protected function after1(AcceptanceTester $I)
{
codecept_debug('after1');
}

protected function after2(AcceptanceTester $I)
{
codecept_debug('after2');
}
}


この場合の実行結果ですが、

$ vendor/bin/codecept run acceptance --debug

Codeception PHP Testing Framework v2.2.8
Powered by PHPUnit 5.7.9 by Sebastian Bergmann and contributors.

Acceptance Tests (3) -----------------------------------------------------------
Modules: PhpBrowser, \Helper\Acceptance
--------------------------------------------------------------------------------
HogeCest: Test hogeTest
Signature: HogeCest:hogeTest
Test: tests/acceptance/HogeCest.php:hogeTest
Scenario --
_before
hogeTest
_after
PASSED

HogeCest: Test fooTest
Signature: HogeCest:fooTest
Test: tests/acceptance/HogeCest.php:fooTest
Scenario --
_before
before1
fooTest
after1
_after
PASSED

HogeCest: Test barTest
Signature: HogeCest:barTest
Test: tests/acceptance/HogeCest.php:barTest
Scenario --
_before
before1
before2
barTest
after1
after2
_after
PASSED

--------------------------------------------------------------------------------

Time: 408 ms, Memory: 12.75MB

OK (3 tests, 0 assertions)

となります。

前処理の場合、


  1. _before()

  2. 1つめの@beforeで指定したメソッド

  3. 2つめの@beforeで指定したメソッド

  4. 以下@beforeを指定した順

というように、

_before()実行後、@beforeの順番通りに実行されます。

後処理の場合は、


  1. 1つめの@afterで指定したメソッド

  2. 2つ目の@afterで指定したメソッド

  3. 以下@afterを指定した順

  4. _after()

というように、

@afterの順番通りに実行したのち_after()が実行されます。