$stack. setUp().tearDown(). StackTest таким образом, чтобы повторно использовать не тестовое окружение, а код, который его создает.$stack, которую мы будем использовать вместо локальной переменной метода.setUp(). $this->stack, вместо локальной переменной метода $stack.<?php
class StackTest extends PHPUnit_Framework_TestCase
{
protected $stack;
protected function setUp()
{
$this->stack = array();
}
public function testEmpty()
{
$this->assertTrue(empty($this->stack));
}
public function testPush()
{
array_push($this->stack, 'foo');
$this->assertEquals('foo', $this->stack[count($this->stack)-1]);
$this->assertFalse(empty($this->stack));
}
public function testPop()
{
array_push($this->stack, 'foo');
$this->assertEquals('foo', array_pop($this->stack));
$this->assertTrue(empty($this->stack));
}
}
?>
* This source code was highlighted with Source Code Highlighter.
setUp() и tearDown() вызываются по одному разу для каждого тестового метода (и для нового экземпляра) тестового класса.setUpBeforeClass() и tearDownAfterClass() вызываются прежде, чем будет выполнен первый метод тестового класса и после того как последний метод будет завершен.<?php
require_once 'PHPUnit/Framework.php';
class TemplateMethodsTest extends PHPUnit_Framework_TestCase
{
public static function setUpBeforeClass()
{
print __METHOD__ . "\n";
}
protected function setUp()
{
print __METHOD__ . "\n";
}
protected function assertPreConditions()
{
print __METHOD__ . "\n";
}
public function testOne()
{
print __METHOD__ . "\n";
$this->assertTrue(TRUE);
}
public function testTwo()
{
print __METHOD__ . "\n";
$this->assertTrue(FALSE);
}
protected function assertPostConditions()
{
print __METHOD__ . "\n";
}
protected function tearDown()
{
print __METHOD__ . "\n";
}
public static function tearDownAfterClass()
{
print __METHOD__ . "\n";
}
protected function onNotSuccessfulTest(Exception $e)
{
print __METHOD__ . "\n";
throw $e;
}
}
?>
* This source code was highlighted with Source Code Highlighter.
phpunit TemplateMethodsTest PHPUnit 3.4.2 by Sebastian Bergmann. TemplateMethodsTest::setUpBeforeClass TemplateMethodsTest::setUp TemplateMethodsTest::assertPreConditions TemplateMethodsTest::testOne TemplateMethodsTest::assertPostConditions TemplateMethodsTest::tearDown .TemplateMethodsTest::setUp TemplateMethodsTest::assertPreConditions TemplateMethodsTest::testTwo TemplateMethodsTest::tearDown TemplateMethodsTest::onNotSuccessfulTest FTemplateMethodsTest::tearDownAfterClass Time: 0 seconds There was 1 failure: 1) TemplateMethodsTest::testTwo Failed asserting that <boolean:false> is true. /home/sb/TemplateMethodsTest.php:30 FAILURES! Tests: 2, Assertions: 2, Failures: 1.
setUp() и tearDown() теоретически должны быть полностью симметричны, однако на практике это ни так. tearDown(), если в setUp() открыли какой-нибудь внешний ресурс, например, сокет или файл. Если setUp() создает только объекты PHP, tearDown() можно игнорировать. Однако, если в setUp() создается множество объектов, разумно в tearDown() поместить вызовы unset() для созданных объектов.tearDown() выполнит функцию сборщика мусора.setUp() отличаются незначительно, перенесите специфический код из setUp() в тестовые методы.setUp() сильно отличаются, то надо создать другой тестовый класс. Назовите этот новый класс по аналогии с отличиями в тестовом окружении.setUp() и tearDown() класса PHPUnit_Framework_TestSuite (см. раздел Использование класса TestSuite) для подключения к базе данных до выполнения первого теста тестового набора и отключения от базы после выполнения последнего теста. Атрибут $sharedFixture объекта PHPUnit_Framework_TestSuite доступен во всех объектах классов, унаследованных от PHPUnit_Framework_TestSuite и PHPUnit_Framework_TestCase.<?php
require_once 'PHPUnit/Framework.php';
class DatabaseTestSuite extends PHPUnit_Framework_TestSuite
{
protected function setUp()
{
$this->sharedFixture = new PDO(
'mysql:host=wopr;dbname=test',
'root',
''
);
}
protected function tearDown()
{
$this->sharedFixture = NULL;
}
}
?>
* This source code was highlighted with Source Code Highlighter.
$foo = 'bar'; сохраняется как $GLOBALS['foo'] = 'bar';.$GLOBALS по другому называется суперглобальная.$foo или используя прямой доступ$GLOBALS['foo'], или применив ключевое слово global $foo; для создания локальной переменной, которая будет связана с глобальной.$GLOBALS, $_ENV, $_POST, $_GET, $_COOKIE, $_SERVER, $_FILES, $_REQUEST) не влияет на другие тесты. Дополнительно, эта изоляция может быть расширена и на статические атрибуты классов.serialize() и unserialize().PDO, не могут быть сохранены и восстановлены.$GLOBALS завершится с ошибкой.@backupGlobals, см. раздел @backupGlobals.class MyTest extends PHPUnit_Framework_TestCase
{
protected $backupGlobalsBlacklist = array('globalVariable');
// ...
}$backupGlobalsBlacklist внутри метода, например, setUp() не будет иметь эффект.@backupStaticAttributes, см. раздел @backupStaticAttributesclass MyTest extends PHPUnit_Framework_TestCase
{
protected $backupStaticAttributesBlacklist = array(
'className' => array('attributeName')
);
// ...
}$backupStaticAttributesBlacklist внутри метода, например, setUp() не будет иметь эффект.Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.
комментарии (4)