Baranov_Dron
Новичок
[phpunit] Inline Teardown
Часто бывает, такое, что каждый тест в наборе тестов, создаёт и работает со своим файлом, и вешать очистку файлов, их удаление, наоборот создание и т.д. не охото на функцию tearDown(). Так как там будет куча конструкций вида:
которые в свою очередь очень сильно ухудшают чтение тестов и использование их как документации.
Для моей задачи весьма подошёл паттерн Inline Teardown .
Там дан весьма красивый пример кода:
.
Код очистки
Работает всегда!
Попробовал пустить два теста, наспешь написанных.
Результат:
А во втором тесте не сработала очистка. Моя же цель, чтобы сработала очистка и чтобы показывалось, что да, отловлена ошибка в тестируемой системе и данные этой ошибки(во втором тесте это Failed asserting that <integer:2> matches expected value <integer:1>).
Как собственно это реализовать? Ведь конструкции try {} finally {} в php нет.
-~{}~ 07.03.09 19:01:
up(
Часто бывает, такое, что каждый тест в наборе тестов, создаёт и работает со своим файлом, и вешать очистку файлов, их удаление, наоборот создание и т.д. не охото на функцию tearDown(). Так как там будет куча конструкций вида:
PHP:
public function tearDown()
{
@unlink($this->getTempDir() . 'test_create.xml';
@unlink($this->getTempDir() . 'test_create.txt';
@unlink($this->getTempDir() . 'test_create.doc';
@touch($this->getTempDir() . 'test_delete.xml';
@touch($this->getTempDir() . 'test_delete.txt';
@touch($this->getTempDir() . 'test_delete.doc';
}
Для моей задачи весьма подошёл паттерн Inline Teardown .
Там дан весьма красивый пример кода:
PHP:
public void testGetFlightsByOriginAirport_NoFlights_TDGC() throws Exception {
// Fixture setup
BigDecimal outboundAirport = createTestAirport("1OF");
try {
// Exercise System
List flightsAtDestination1 = facade.getFlightsByOriginAirport(outboundAirport);
// Verify Outcome
assertEquals(0,flightsAtDestination1.size());
} finally {
if (outboundAirport!=null) {
facade.removeAirport(outboundAirport);
}
}
}
Код очистки
PHP:
if (outboundAirport!=null) {
facade.removeAirport(outboundAirport);
}
Попробовал пустить два теста, наспешь написанных.
PHP:
<?php
class prostoTest extends PHPUnit_Framework_TestCase
{
public function testOne()
{
try
{
$this->assertEquals(1, 2);
}
catch (Exception $e) {}
echo 'cleaned_one';
}
public function testTwo()
{
$this->assertEquals(1, 2);
echo 'cleaned_two';
}
}
?>
Как можно заметить - в первом тесте $this->assertEquals(1, 2); определилось как успешное сравнение!C:\xampp\htdocs\phpunit>phpunit prostoTest
PHPUnit 3.3.9 by Sebastian Bergmann.
cleaned_one.F
Time: 0 seconds
There was 1 failure:
1) testTwo(prostoTest)
Failed asserting that <integer:2> matches expected value <integer:1>.
C:\xampp\htdocs\phpunit\prostoTest.php:17
FAILURES!
Tests: 2, Assertions: 2, Failures: 1.
А во втором тесте не сработала очистка. Моя же цель, чтобы сработала очистка и чтобы показывалось, что да, отловлена ошибка в тестируемой системе и данные этой ошибки(во втором тесте это Failed asserting that <integer:2> matches expected value <integer:1>).
Как собственно это реализовать? Ведь конструкции try {} finally {} в php нет.
-~{}~ 07.03.09 19:01:
up(
Вместо unset следует читать rmdir