PHPUnit - заглушка, действующая как тип сборки - PullRequest
1 голос
/ 05 сентября 2011

Как мне, например, сделать мою заглушку похожей на ArrayIterator? Я имею в виду, я хочу перебрать эту заглушку. Это упражнение из Практического тестирования PHP.

7.2
Write a EvenIterator which takes a FibonacciIterator an iterates only
on the even-indexed values (returning 0, 1, 3, 8, 21...).
7.3
Write tests for the EvenIterator class, stubbing out the
FibonacciIterator using an ArrayIterator in substitution, which is provided
by the Spl (otherwise it will never terminate!)

Спасибо.

1 Ответ

3 голосов
/ 05 сентября 2011

Если я правильно понимаю, задача состоит в том, чтобы проверить EvenIterator, используя ArrayIterator в качестве заглушки для FibonacciIterator. Например, загрузите ArrayIterator массивом четных значений, передайте его EvenIterator, и вы получите те же значения. Затем сделайте то же самое с массивом нечетных значений, и вы получите пустой набор результатов.


class EvenIteratorTest extends \PHPUnit_Framework_TestCase {

  public function testDoesNotRemoveEvens() {

    $data = array(2,4,6,8);
    $arrayIterator = new \ArrayIterator($data);
    $object = new EvenIterator($arrayIterator);

    $expected = $data;
    $actual = array();
    foreach($object as $v) {
      $actual[] = $v;
    }
    $this->assertEquals($expected,$actual);
  }

  public function testFiltersOutOdds() {

    $data = array(1,3,5,7);
    $arrayIterator = new \ArrayIterator($data);
    $object = new EvenIterator($arrayIterator);

    $actual = array();
    foreach($object as $v) {
      $actual[] = $v;
    }
    $this->assertEmpty($actual);
  }

}

Как видите, много дублированного кода, поэтому необходимо провести рефакторинг.

...