Как установить определенные свойства класса для теста PHPunit? - PullRequest
2 голосов
/ 29 марта 2011

Что является хорошим советом для phpunit, чтобы установить некоторые значения конфигурации по умолчанию в тесте?

Я думаю о таких ценностях, как

имя пользователя идентификатор клиента нет. и т. Д.

Обычно я бы устанавливал это, используя конструктор или некоторые сеттеры, но я не уверен, как это сделать, когда у меня есть только такой класс

class RestTest extends PHPUnit_Framework_TestCase {

Например, я пытаюсь создать контрольные примеры для службы REST и SOAP.

Мне нужно указать url / user и pass, но они изменяются в dev / test / production, поэтому мне нужен чистый способ их указать.

Ответы [ 2 ]

4 голосов
/ 29 марта 2011

Если у вас есть некоторые значения по умолчанию, такие как UserId, которые вам нужны в каждом тестовом примере вашего теста, я бы предложил установить их в методе setUp вашего класса.

Просто пример для установки значений:

class MtTest extends PHPUnit_Framework_TestCase {

    // As a property
    private $testUser = 7;

    // In the setUp
    public function setUp() {
        $this->testUser = 7;
        $this->defaultName = "BOB";
        $this->MtClass = new Mt();
    }

    public function testFoo() {
         $this->assertTrue($this->MtClass->userExists($this->testUser));
    }
}

Если у вас есть набор значений, которые необходимо ввести в один метод теста, используйте DataProviders, например, @SilverLight (+1).

Ответ на комментарий:

Если вам нужна какая-то настройка среды (для всего, что вы пытаетесь сделать, я просто покажу имя пользователя, так как не могу догадаться), вы можете установить их в своем PHPUnit Bootstrap (или файл, который вы передаете --bootstrap):

bootstrap.php

<?php
define("PHPUnit_Username", "Fuuu");
// or
$phpunitConfig = new Array(
     "username" => "fuu",
)
// or whatever suits you there. No reason for me to type a config object i guess
class MyPHPUnitConfig {
     public function getUsername() { return "wtf"; }
}

и, возможно, у вас есть свой базовый тестовый класс

<?php
class MyBaseTest extends PHPUnit_Framework_TestCase {

    public function setUp() {
        parent::setUp();
        $this->config = new MyPHPUnitConfig();
    }
}

и продолжайте от этого. Или используйте setUpBeforeClass, чтобы сделать это только один раз за тестовый класс.


Если это не отвечает на ваш вопрос, я просто не понимаю, к чему вы стремитесь. Это тестовый сценарий, у него нет сильных зависимостей, и он kinda shouldn't have any (Isolation), и я не думаю, что ваша проблема в том, как получить значение в вашей функции setUp? (Потому что это не проблема phpunit).

Дайте мне знать, помогло ли это

3 голосов
/ 29 марта 2011

Я думаю, что вы ищете поставщиков данных :

<?php
class DataTest extends PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider provider
     */
    public function testAdd($a, $b, $c)
    {
        $this->assertEquals($c, $a + $b);
    }

    public function provider()
    {
        return array(
          array(0, 0, 0),
          array(0, 1, 1),
          array(1, 0, 1),
          array(1, 1, 3)
        );
    }
}
?>

поставщик данных может содержать информацию любого типа, включая имя пользователя, идентификатор клиента и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...