Динамически создавать тесты PHPUnit из файла данных - PullRequest
7 голосов
/ 30 ноября 2009

У меня есть файл данных с входными и ожидаемыми результатами. Примером может быть:

input:   output:
2        3
3        5
4        Exception
5        8
...      ...

В настоящее время у меня есть специальное решение для чтения из файла данных и выполнения теста для каждой пары {input, output}. Я хотел бы преобразовать это в решение на основе PHPUnit, и я хотел бы иметь один тест на вход с использованием имени теста forXassertY . Таким образом, первые три теста будут называться for2assert3 (), for3assert5 () и for4assertException ().

Я не хочу преобразовывать свои существующие данные в тесты, если возможно динамическое создание методов тестирования и сохранение файла данных в качестве основы для этих тестов. Я хочу преобразовать его в PHPUnit, так как позже я хочу добавить некоторые другие тесты, а также обработать и просмотреть вывод, используя Hudson.

Предложения

Ответы [ 2 ]

12 голосов
/ 14 апреля 2010

Для этого вы можете использовать поставщиков данных PHPUnit :

<?php

require_once 'PHPUnit/Framework/TestCase.php';

class ProviderTest extends PHPUnit_Framework_TestCase
{
    public function testCaseProvider()
    {
        // parse your data file however you want
        $data = array();
        foreach (file('test_data.txt') as $line) {
            $data[] = explode("\t", trim($line));
        }

        return $data;
    }

    /**
     * @dataProvider testCaseProvider
     */
    public function testAddition($num1, $num2, $expectedResult)
    {
        $this->assertEquals($expectedResult, $num1 + $num2);
    }
}

?>

и ваш файл test_data.txt выглядит примерно так:

1   2   3
2   2   4
3   5   7

Затем запустите тест:

$ phpunit ProviderTest.php
PHPUnit 3.4.12 by Sebastian Bergmann.

...F

Time: 0 seconds, Memory: 5.75Mb

There was 1 failure:

1) ProviderTest::testAddition with data set #2 ('3', '5', '7')
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-7
+8

/Users/dana/ProviderTest.php:23

FAILURES!
Tests: 4, Assertions: 3, Failures: 1.
0 голосов
/ 01 декабря 2009

Ну, файлы PHP - это просто текстовые файлы, так что вы можете написать скрипт TestGenerator.php, который будет читать файл данных и выплевывать кучу файлов теста .php. Сценарий Test Generator будет таким же простым, как «прочитать строку, разобрать ее, выплюнуть PHP». Затем просто запустите этот сценарий генератора тестов как часть процесса сборки / тестирования, и все готово.

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