[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: (3) Тестирование PHPUnit
SlavaFr
Аssert (утверждать)
Как бы мы тестировали обычными методами php?
В общем не чего особенного, просто проверить соответствует ли содержание переменной или ретурн функции с тем, что мы ожидали.
Например
= 2 * 3;

Мы ожидаем и утверждаем, что $а должен быть равен 6, в противном случае случилось чтото непредвиденное и мы должны реагировать на поведение нашей программы, или может даже увидим логическую ошибку совершенную нашим не правильным ожиданием

if (!== 6) {
echo "что то не так, я ожидал 6\n";
}

Такая конструкция не очень гибкая, так как кроме "echo" у нас могут возникнуть более интересные методы запоминания результатов теста.
PHPUnit позаботился о многих проблемах и предлагает гибкую возможность для тестов и дает возможность многое настроить через конфигурацию или посредством передачи параметров. Дла этого PHPUnit капсулирует нашi запросы на верность выражения в функции assert (утверждать, заявлять, доказывать).
В классе PHPUnit_Framework_Assert мы можем найти аssert функции.
Функции построены по одинаковому принципу и их можно интуитивно применять
assertXXXXX(один или несколько параметров для проверки , (string)"заявление в случае если проверка не соответствует ожиданию");
Наш пример в PHPunit можно было бы записать так
$this->assertEquals($a,6,'я ожидал 6');

или даже так
$this->assertTrue($a==6,'я ожидал 6');


Список аssert: http://www.phpunit.de/manual/current/en/wr...unit.assertions
Начинать можно действительно с самых простых assertEquals, assertTrue, assertFalse

Ок. Попробуем написать первый тест и запустить его через PHPUnit
Создайте папку для теста и создайте новый файл
PrimitivTest.php

<?php
class
PrimitivTest extends PHPUnit_Framework_TestCase {

}


PHPUnit_Framework_TestCase это класс который мы должны наследовать, чтоб написать тест.

Если мы зайдем через консоле в папку с нашим тестом и вызовем тест
papka> phpunit PrimitivTest.php

то получим такое сообщение

PHPUnit 3.7.10 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 3.25Mb

There was 1 failure:

1) Warning
No tests found in class "PrimitivTest".

FAILURES!
Tests: 1, Assertions: 0, Failures: 1.

Большая буква "F" означает "Failures" ="Провал нашего теста"
Предупреждение говорит о том, что в нашем классе PrimitivTest небыло найдено тестов, а также сказано, что была попытка запущен один тест, что небыло не одного assert-Metoda( Assertions: 0), а также провал теста (Failures: 1)

Исправим ситуацию и напишим в нашем классе первый тестметод. Чтобы метод был расспознан как тест, нужно исполнить по меньшей мере одно из следующих условий:
1) или название метода должно начинатся со слова "test"
2) или метод имеет анатацию @test

/**
* @test
*/
public function ....

попробуем с анататион

<?php
class
PrimitivTest extends PHPUnit_Framework_TestCase {

/**
*
@test
*/
public function isOneEqualsOne()
{

}
}



если вы опять запустите тест, то получите приблизительно следующее


papka> phpunit PrimitivTest.php

PHPUnit 3.7.10 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 3.25Mb

OK (1 test, 0 assertions)

Теперь мы видем вместо "F" просто точку "." которая означает, что тест прошол удачно. 1 тест и 0 assertions.
Не смотря на то, что мы не сделали не одной проверки посредством "assert" тест является удачным.
Иногда просто вызов какой нибидь функции внутри теста которая не вызывает ошибки можно рассматривать как удачный тест, но в нашем случае исходя из имя функции мы хотим проверить является ли 1==1 и по этому впишим в нее проверку этого утверждения посредством assert. Изменим функцию так:


/**
*
@test
*/
public function isOneEqualsOne()
{
$this->assertEquals(1,1,"impossible 1!=1");
}

Если вы запустите тест, то увидите в результате первую assertion : "OK (1 test, 1 assertions)"


Для того, чтоб понять как работают приметивные утверждения (asserts) создайте новый класс
AssertionsTest.php

<?php
/**
* test Assertions
* Рассматримаем только позитивно прошедшие тесты
*/

class AssertionsTest extends PHPUnit_Framework_TestCase
{

/**
* assertTrue() and assertFalse
*
@test
*/
public function TrueAndFalse()
{
//тестируем равняется ли переменная true
$variable = true;
$this->assertTrue($variable, '$variable is not equals true');

//тестируем равняется ли переменная false
$variable = false;
$this->assertFalse($variable, '$variable is not equals false');
}

/**
* тест на сравнение переменных
*
@test
*/
public function compareMethods()
{
$a = 10;
$b = '10';
//ожидаем, что $a и $b одинаковы без учета типа
$this->assertEquals($a, $b, '$a and $b are not equals');

//ожидаем, что $a и $b не одинаковы без учета типа
$a = 9;
$this->assertNotEquals($a, $b, '$a and $b are equals');

//иногда требуется допустить при сравнении толерантность
//3-й параметр в функциях assertEquals и assertNotEquals
//разрешает указать на сколько разрешина толерантность.

$tolerance = 1.5;
$this->assertEquals(
$a, $b, '$a and $b are not equals' , $tolerance
);

//assetNotEquals при толерантности 1.5 должен иметь
//разницу между переменными большей 1.5.
//Тоесть при сравнении 8.5 с 10 переменные являются еще одинаковыми,
//а при сравнении 8.5 и 10.1 уже нет

$this->assertNotEquals(
8.5, 10.1, '$a and $b are not equals' , $tolerance
);

//для быстрого сравнениа с учетом типа переменных
// or assertTrue($var1 === $var2)

$this->assertSame(16,16);
$this->assertNotSame(17,16);

}


}




и попробуйте запустить его с командной строки "phpunit AssertionsTest.php"

Почитайте коментарии в классе и попробуйте, поэксперементировать с переменными, так, чтоб получить неудачные тесты и постарайтесь техт который выдает phpunit после удачных и неудачных тестов.

Продолжение следует.

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.