如何在PHPUnit中将变量从测试函数移动到setUp函数?

时间:2014-09-10 08:53:14

标签: php oop symfony phpunit

我正在尝试同时学习SymfonyPHP。我从写测试开始,已经有问题了。我有这2条重复的行

$client = static::createClient();
$crawler = $client->request('GET', '/');

我可以告诉我会使用很多。所以我希望这能节省测试速度并设计更好。这是我的测试文件代码:

StaticControllerTest.php

<?php
namespace Qnsi\StaticBunde\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

#I want this class to only test /, other class to test About,Contact etc.
class StaticControllerIndexTest extends WebTestCase
{

  public function testStaticControllerControllsRequest()
  {
    $client = static::createClient();
    $crawler = $client->request('GET', '/');

    $this->assertEquals(
      'Qnsi\StaticBunde\Controller\StaticController:indexAction',
      $client->getRequest()->attributes->get('_controller'));
  }

  public function testRouteToRootExists()
  {  
    $client = static::createClient();
    $crawler = $client->request('GET', '/');

    $this->assertTrue(200 === $client->getResponse()->getStatusCode());
  }
}
?>

到目前为止,我发现我需要使用setUpBeforeClass()并在那里初始化我的变量。但我真的不知道怎么做。我试过了

private $client;
private $crawler;
public static function setUpBeforeClass()
{
    $client = static::createClient();
    $crawler = $client->request('GET', '/');
}

和不同的组合,但我无法弄明白。

我知道这是我缺乏良好的PHP基础,但这是我更喜欢学习的方式。通过调整和学习示例。可悲的是,我很难在github Symfony找到一个好的测试示例,所以我不得不来这里打扰你。

1 个答案:

答案 0 :(得分:2)

如果您需要在每次测试之前初始化某些内容,请使用setUp方法:

public function setUp() 
{
    $this->client = static::createClient();
    $this->crawler = $this->client->request('GET', '/');
}