【问题标题】:Load file/singleton in PHPUnit bootstrap在 PHPUnit 引导程序中加载文件/单例
【发布时间】:2017-09-08 15:56:30
【问题描述】:

我正在开发一个库以方便测试。

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

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

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

我似乎无法在我的家用计算机上以相同的方式访问我的引导文件中的任何变量。 $GLOBALS 被完全擦除,即使我使用了preserveGlobals

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

【问题讨论】:

    标签: php phpunit phpstorm


    【解决方案1】:

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

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

    这里,给定路径的functions.php文件将被自动拉入。 "autoload-dev": { "files": [...] } 部分也可以使用相同的配置。

    【讨论】:

      【解决方案2】:

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

      我原来的引导程序没有创建单例对象,只是包含了自动加载器。

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

      不过,我仍然喜欢 jetbrains 的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-03
        相关资源
        最近更新 更多