PHPUnit:从setUp()获取测试类和方法的名称?
Posted
技术标签:
【中文标题】PHPUnit:从setUp()获取测试类和方法的名称?【英文标题】:PHPUnit: Get name of test class and method from setUp()? 【发布时间】:2012-09-24 02:52:30 【问题描述】:phpUnit 在运行特定测试之前运行测试类的setUp()
方法。
我为测试类中的每个测试加载特定于测试的夹具,并且不希望显式地这样做。理想情况下,我希望在 setUp()
方法中自动处理此问题。
如果setUp()
方法使测试类名称和测试方法名称可用,则可以这样做。
setUp()
方法中我可以使用即将运行的测试类和方法的名称吗?
【问题讨论】:
【参考方案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";
【讨论】:
以上是关于PHPUnit:从setUp()获取测试类和方法的名称?的主要内容,如果未能解决你的问题,请参考以下文章
如果重写setUp和tearDown,则不会调用PHP,phpunit和dbunit - getConnection和getDataSet
PHPUnit -setUp() - 它在每个测试用例之前和之后运行吗?