我有一个PHPUnit测试
PHPUnit框架是否提供功能来指定我想要在
testFoo()
,并使用数据提供程序fooProvider()
。在testFoo()
的开头,我使用Runkit重新定义了一个方法,以便在该方法返回我重新定义为返回的内容时测试预期结果。但是,重新定义方法需要一些时间,因此我希望它仅在此测试中发生一次。PHPUnit框架是否提供功能来指定我想要在
testFoo()
运行之前只运行一次的代码,并且不是每个由fooProvider()
返回的元素或测试套件中的每个测试都运行一次(例如setUp()
)?
@before
,但在测试中实现自己的提供程序,例如$dataSets = $this->getDataSets()
(应返回数据数组),然后通过循环来进行断言。这样,PHPUnit框架只会启动一次测试,因此setUp()
也只会运行一次(从它的角度来看,测试只会运行一次)。 - xmike@beforeTest
注释来指定在测试之前运行的函数,这样我就不需要在我的测试方法中添加循环和引用设置。但是从我所看到的PHPUnit文档中,似乎并没有这个功能? - thanksd@before
在每个测试之前只运行一次。问题在于,如果你使用了@dataProvider
,测试将会为每个数据集重新启动,因此也会执行@before
-- 这就是 PHPUnit 框架处理数据提供的方式(这是因为测试必须在每个新数据集上被调用,并将该新集作为参数接收)。因此,避免重新启动的方法就是不使用自动化的数据提供。 - xmike