如何为PHPunit测试设置特定的类属性?

时间:2011-03-29 14:27:07

标签: php unit-testing phpunit

phpunit在测试中设置一些默认配置值的最佳做法是什么?

我正在考虑像这样的价值观

  • 用户名
  • 客户ID不。
  • 等......

    通常情况下,我会使用构造函数或一些setter来设置它,但是当我只有这样的类时我不知道该怎么做

    class RestTest extends PHPUnit_Framework_TestCase {
    

    例如,我正在尝试为REST和SOAP服务创建测试用例。

    我需要指定url / user并传递但是它们会在dev / test / production上更改,所以我需要一种干净的方式来指定它们。

  • 2 个答案:

    答案 0 :(得分:4)

    如果您在测试的每个测试用例中都有一些默认值,例如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));
        }
    }
    

    如果您有一组需要输入一个测试方法的值,请使用@SilverLight(+1)建议的DataProviders。

    对评论的回应:

    如果您需要某种环境设置(无论您想要做什么,我现在只使用用户名,因为我无法猜测)您可以在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"; }
    }
    

    并且可能有自己的基础Testclass

    <?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问题)。

    如果有帮助,请告诉我

    答案 1 :(得分:3)

    我认为您正在寻找data providers

    <?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)
            );
        }
    }
    ?>
    

    数据提供者可以包含任何类型的信息,包括用户名,客户端ID等。