【问题标题】:PHPUnit: Get name of test class and method from setUp()?PHPUnit:从setUp()获取测试类和方法的名称?
【发布时间】:2012-09-24 02:52:30
【问题描述】:

PHPUnit 在运行特定测试之前运行测试类的setUp() 方法。

我为测试类中的每个测试加载特定于测试的夹具,并且不希望显式地这样做。理想情况下,我希望在 setUp() 方法中自动处理此问题。

如果setUp() 方法使测试类名称和测试方法名称可用,则可以这样做。

setUp() 方法中我可以使用即将运行的测试类和方法的名称吗?

【问题讨论】:

    标签: php phpunit


    【解决方案1】:

    实现这一点的最简单方法应该是在setUp() 中调用$this->getName()

    <?php
    
    class MyTest extends PHPUnit_Framework_TestCase
    {
        public function setUp() {
            var_dump($this->getName());
        }
    
    
        public function testMethod()
        {
            $this->assertEquals(4,2+2,'OK1');
        }
    }
    

    并运行:

    phpunit MyTest.php 
    

    产生:

    PHPUnit 3.7.1 by Sebastian Bergmann.
    
    .string(10) "testMethod"
    
    
    Time: 0 seconds, Memory: 5.00Mb
    
    OK (1 test, 1 assertion)
    

    一般来说,我建议不要这样做,但在某些情况下,它确实是一种很好的做事方式。

    其他选项是拥有多个测试类,并将所有使用相同夹具的测试放在一个类中。

    另一种方法是拥有私有的 setUp 助手并从测试用例中调用适当的助手。

    【讨论】:

    • @jon-cram 为了获取当前测试类的名称,PHPUnit 本身使用get_class($this) 获取包含命名空间部分的类名
    • 值得注意的是,getName() 目前在 PHPUnit 中被标记为 @internal,并且有一个被排除在向后兼容性之外的注释。相关的toString() 也是@internal 接口的一部分。似乎它并不热衷于提供对此的公共访问,即使从技术上讲它就在那里并且public
    【解决方案2】:

    或者,如果您不想在 edorian 的答案中显示 string(10) 部分,您可以这样做:

    protected function setUp()
    {
        echo $this->getName() . "\n";
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 2014-09-21
      • 1970-01-01
      相关资源
      最近更新 更多