在PHPUnit引导程序中加载文件/单例

时间:2017-04-12 18:17:08

标签: php phpunit phpstorm

我正在开发一个便于测试的库。

我需要在引导程序中加载一次文件,这在多个测试类和测试中使用。该文件不会改变状态。

通过在引导程序中放入单例然后在我的测试中访问它来解决此问题的一种方法。另一种方法是使用setUpBeforeClass每个套件读取一次文件,但我不想这样做,因为它会在每个测试类中读取一次文件,而不是整个测试套件只读一次。 / p>

这适用于我的工作机器,但是,在我的家庭安装中,单例总是为NULL。我在两者上都使用PHP 7.1,它是两者上最新的PHPUnit。

我似乎无法在我的家庭计算机上以相同的方式访问我的引导程序文件中的任何变量。即使我使用$GLOBALSpreserveGlobals也会完全被删除。

我想保留我的单身人士,因为虽然它可能会让一些人离开,但它运作良好并且仅以纯粹的测试方式存在。但是,如果有一个替代我的问题,我希望如此。

2 个答案:

答案 0 :(得分:1)

Composer,您将用于自动加载库和项目自己的类,可以设置为composer.json autoload section中的自动(并且无条件)包含文件。

{
    "autoload": {
        "files": ["src/MyLibrary/functions.php"]
    }
}

此处,给定路径下的functions.php文件将自动拉入。同样的配置也适用于"autoload-dev": { "files": [...] }部分。

答案 1 :(得分:0)

我在phpstorm中设置了一个默认的bootstrap文件(testbootstrap.php),然后我写了另一个bootstrap文件(testbootstrap2.php),并在phpunit.xml中指向它。如果这样做,phpunit.xml 中的引导程序将被忽略

我的原始bootstrap没有制作单例对象,只包括自动加载器。

所以我把它关了。那是我生命中的两个晚上。我可以建议您不要使用该功能,因为这并不能真正起到"默认"在我看来,因为提供不同的文件并不会覆盖它。我不确定它是否与默认配置文件不一样。

然而,我仍然喜欢jetbrains的东西。

oops