【问题标题】:Dynamically create PHPUnit tests from data-file从数据文件动态创建 PHPUnit 测试
【发布时间】:2010-04-14 12:14:53
【问题描述】:

我有一个包含输入和预期输出的数据文件。一个例子可能是:

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

目前我有一个自定义解决方案可以从数据文件中读取并对每个 {input,output} 对执行测试。我想将其转换为基于 PHPUnit 的解决方案,并且我想使用测试名称 forXassertY 对每个输入进行一个测试。所以前三个测试将被称为 for2assert3()、for3assert5() 和 for4assertException()。

如果可以动态创建测试方法并将数据文件作为这些测试的基础,我不想将现有数据转换为测试。我想将其转换为 PHPUnit,因为我想稍后添加一些其他测试并使用 Hudson 处理和查看输出。

建议?

【问题讨论】:

    标签: php phpunit


    【解决方案1】:

    您可以为此使用 PHPUnit 的 data providers

    <?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.
    

    【讨论】:

      【解决方案2】:

      嗯,PHP 文件只是文本文件,因此您可以编写一个 TestGenerator.php 脚本,该脚本将读取数据文件并输出一堆 .php 测试文件。测试生成器脚本就像“读取行,解析它,吐出 PHP”一样简单。然后,只需在构建/测试运行过程中运行该测试生成器脚本,就可以开始了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-09
        • 1970-01-01
        • 1970-01-01
        • 2019-11-02
        • 2014-08-21
        • 1970-01-01
        • 2014-10-06
        相关资源
        最近更新 更多