Страница 1 из 1

Как писать unit тесты ? [Решено]

Добавлено: 2014.03.02, 16:08
nepster
Уже второй день пытаюсь разобраться как писать тесты в Yii и ничего не выходит.

По данному мануалу
http://php-md5.blogspot.com/2013/05/php ... ework.html

я установил все это дело с phpunit

Перехожу в папку:
\yii2\apps\advanced\frontend\tests\unit

Создаю свой первый тестMyOneTest.php:

Код: Выделить всё

use \yii\codeception\TestCase;

class MyOneTest extends TestCase
{
    public function testFailure()
    {
        $this->assertTrue(true);
    }
} 
пример тоже где-то подцепил из мануалов, запускаю: phpunit MyOneTest.php

Код: Выделить всё

F:\OpenServer\domains\portf.ru\yii2\apps\advanced\frontend\tests\unit>phpunit My
OneTest.php
PHP Fatal error:  Class 'yii\codeception\TestCase' not found in F:\OpenServer\do
mains\portf.ru\yii2\apps\advanced\frontend\tests\unit\MyOneTest.php on line 6

Fatal error: Class 'yii\codeception\TestCase' not found in F:\OpenServer\domains
\portf.ru\yii2\apps\advanced\frontend\tests\unit\MyOneTest.php on line 6

Написал как-то так:

Код: Выделить всё

class MyOneTest extends PHPUnit_Framework_TestCase
{
    public function testFailure()
    {
        $this->assertTrue(true);
    }
} 
Вроде все работает.

Код: Выделить всё

PHPUnit 3.7.32 by Sebastian Bergmann.

.

Time: 72 ms, Memory: 1.75Mb

OK (1 test, 1 assertion)
 


Но в таком случае я так понял у меня не будет доступа в методах теста к компонентам Yii. Подскажите пожалуйста что делать?

Re: Как писать unit тесты ?

Добавлено: 2014.03.02, 17:36
flashimage

Re: Как писать unit тесты ?

Добавлено: 2014.03.02, 21:47
nepster
С горем пополам разобрал я этот док с помощью гугл переводчика, но мало, что понял.

Я прочитал отдельно про codecept, что то там примерно понял.

Захожу в свою папку frontend, подкачал туда codecept.phar

Запускаю это дело:

php codecept.phar run

Код: Выделить всё

 [Codeception\Exception\Configuration]
 WebGuy class doesn't exists in suite folder.
 Run the 'build' command to generate it

php codecept.phar build

Код: Выделить всё

  [Codeception\Exception\Configuration]
  common\tests\_helpers\FixtureHelper could not be found and loaded
\common\tests\_helpers\FixtureHelper.php - тот файл присутствует.


Что делать?

Re: Как писать unit тесты ?

Добавлено: 2014.03.02, 22:11
flashimage
Вы бы сначала научились пользоваться composer, в yii2 без него никуда. Он кроме того, что скачивает основное, скачивает еще и зависимости и генерит автолоадер.

Re: Как писать unit тесты ?

Добавлено: 2014.03.02, 22:21
nepster
я выполнял команду

Код: Выделить всё

composer update
в корне приложения. В папке vendor всегда генерируется новый файл /vendor/autoload.php, он же подключается вот тут \frontend\tests\_bootstrap.php

Я про это тоже читал, вроде все как следует сделано, но возникают ошибки.

Re: Как писать unit тесты ?

Добавлено: 2014.03.03, 00:21
flashimage
а это делали?

Код: Выделить всё

php codecept.phar build

Re: Как писать unit тесты ?

Добавлено: 2014.03.03, 00:26
nepster
php codecept.phar build

Код: Выделить всё

      [Codeception\Exception\Configuration]
      common\tests\_helpers\FixtureHelper could not be found and loaded


\common\tests\_helpers\FixtureHelper.php - тот файл присутствует.

Re: Как писать unit тесты ? [Решено]

Добавлено: 2014.03.04, 19:02
nepster
посидел 2 часа с гугл переводчиком и разобрался. Нужна была дополнительная команда для компосеру

Re: Как писать unit тесты ? [Решено]

Добавлено: 2014.12.09, 17:03
astronin
nepster писал(а):посидел 2 часа с гугл переводчиком и разобрался. Нужна была дополнительная команда для компосеру
какая, если не секрет?

Re: Как писать unit тесты ? [Решено]

Добавлено: 2015.01.03, 20:11
miha
astronin писал(а):какая, если не секрет?

Код: Выделить всё

php composer.phar require --dev "codeception/codeception: 1.8.*@dev" "codeception/specify: *" "codeception/verify: *"
из tests\README.md

Re: Как писать unit тесты ? [Решено]

Добавлено: 2015.04.03, 17:56
123Lookatme
Всем привет! Недавно начал разбираться с Codeception в yii2
С acceptance и functional все ясно,Но возник вопрос по Unit тестам:
Предположим у меня есть компонент

Код: Выделить всё

 MyComponent extends \yii\base\Component
у него есть метод

Код: Выделить всё

public function getName(){return 'new_name'}
в тестах я могу изменить этот компонент в методе setUp

Код: Выделить всё

Yii::configure(Yii::$app, [
            'components' => [
                'myComponent' => [
                    'class' => ????
                ],
            ],
        ]); 
также я могу создать Mock класс и переопределить метод getName

Код: Выделить всё

$stub=$this->getMockBuilder('common\components\MyComponent')->setMethods(['getName']) ->getMock()
$stub->method('getName')->willReturn('Another_name'); 
Но как мне заставить приложение во время тестов при любом вызове \Yii::$app->myComponent->getName()
возвращать 'Another_name' ?

Re: Как писать unit тесты ? [Решено]

Добавлено: 2015.04.03, 18:21
lynicidn
у вас в вопросе есть ответ:
создать Mock и переопределить метод getName

юниты не должны как по мне зависеть от Yii::$app

Re: Как писать unit тесты ? [Решено]

Добавлено: 2015.04.09, 15:08
123Lookatme
Подскажите пожалуйста еще один момент.
Мне необходимо протестировать поведение контроллера. В экшне создается модель, вызывается ее метод, который в свою очередь создает и вызывает метод другой модели итд. Возможно ли отследить всю цепочку вызовов в разных условиях, с разными параметрами переданными в экшн, с помощью юнит тестов ?

Re: Как писать unit тесты ? [Решено]

Добавлено: 2016.03.23, 13:30
des1roer
я вот так устанавливал