2017-01-30 3 views
1

Я изучаю Codeception, и мне интересно, когда я должен использовать setUp() или tearDown(), и когда я должен использовать _before() или _after(). Я не вижу разницы. Оба метода запускаются до или после одного теста в моем тестовом файле? В чем разница между установкой() в PHPUnit и _before в Codeception

+0

Какого смысл? Методы имеют точно такое же поведение, как раз они из разных библиотек. –

+0

Но почему Codeception интегрировал эти методы? Я думаю, что для этого должна быть причина. Разве это так, что это одно и то же для Unit Test, и если я продолжу тестирование на функциональность и приём, мне нужны эти методы? – astridx

+0

О, это другой вопрос, не разница, но цель/причина. –

ответ

1

Как упоминал Габриэль Хемминг, setUp() и tearDown() являются способом PHPUnit настройки среды перед запуском каждого теста и срывом среды после запуска каждого теста. _before() и _after() - это способ создания кода.

Чтобы ответить на ваш вопрос о том, почему codeception имеет различный набор методов для этого сошлюсь на документацию codeception по: http://codeception.com/docs/05-UnitTests#creating-test

Как вы видите, в отличие от PHPUnit, методы нАлАдкА и Teardown заменяются их псевдонимы: до, после.

Фактические объекты setUp и tearDown реализуются родительским классом \ Codeception \ TestCase \ Test и устанавливают класс UnitTester, чтобы все классные действия из Cept-файлов выполнялись как часть ваших модульных тестов.

К радостным действиям, на которые относятся документы, относятся любые модули или вспомогательные классы, которые теперь могут использоваться в вашем модульном тесте.

Вот хороший пример того, как использовать модули в тестовом модуле: http://codeception.com/docs/05-UnitTests#using-modules

Давайте пример настройки данной арматуры в модульном тесте:

<?php 


class UserRepositoryTest extends \Codeception\Test\Unit 
{ 
    /** 
    * @var \UnitTester 
    */ 
    protected $tester; 

    protected function _before() 
    { 
     // Note that codeception will delete the record after the test. 
     $this->tester->haveInDatabase('users', array('name' => 'miles', 'email' => '[email protected]')); 
    } 

    protected function _after() 
    { 

    } 

    // tests 
    public function testUserAlreadyExists() 
    { 

     $userRepository = new UserRepository(
      new PDO(
       'mysql:host=localhost;dbname=test;port=3306;charset=utf8', 
       'testuser', 
       'password' 
      ) 
     ); 

     $user = new User(); 
     $user->name = 'another name'; 
     $user->email = '[email protected]'; 

     $this->expectException(UserAlreadyExistsException::class); 

     $user->save(); 

    } 
} 

class User 
{ 
    public $name; 
    public $email; 

} 

class UserRepository 
{ 
    public function __construct(PDO $database) 
    { 
     $this->db = $database; 
    } 

    public function save(User $user) 
    { 
     try { 
      $this->db->prepare('INSERT INTO `users` (`name`, `email`) VALUES (:name, :email)') 
       ->execute(['name' => $user->name, 'email' => $user->email]); 
     } catch (PDOException $e) { 
      if ($e->getCode() == 1062) { 
       throw new UserAlreadyExistsException(); 
      } else { 
       throw $e; 
      } 
     } 

    } 
} 
Смежные вопросы