PHPUnit:如何创建一个函数,为类中的所有测试调用一次?

2022-08-30 07:55:06

我有一个PHPUnit测试用例类(由一些测试函数组成)。我想为类中的所有测试编写一个要调用一次的函数(与标准函数不同,标准函数为类中的每个测试调用一次)。换句话说,我正在寻找一个与JUnit@BeforeClass注释等效的PHPUnit。oneTimeSetUp()setUp()

与函数相同的问题。oneTimeTearDown()

在 PHPUnit 中可以这样做吗?


答案 1

请看 PHPUnit 文档的第 6 节setUpBeforeClass()

对于一次拆解,你应该使用。tearDownAfterClass();

这两个方法都应在类中定义为静态方法。


答案 2

setUpBeforeClass()是执行此操作的方法,如果你的所有测试实际上都包含在一个类中。

但是,您的问题意味着您可能正在使用测试类作为多个测试类的基类。在这种情况下,setUpBeforeClass 将在每个之前运行。如果你只想运行它一次,你可以用一个静态变量来保护它:

abstract class TestBase extends TestCase {

  protected static $initialized = FALSE;
  
  public function setUp() {
    
    parent::setUp();

    if (!self::$initialized) {
      // Do something once here for _all_ test subclasses.
      self::$initialized = TRUE;
    }
  }

}

最后一个选项可能是测试侦听器


推荐