Codeception自动加载类

Eve*_*ron 5 php testing class autoload codeception

我在使用Codeception自动加载器加载一些抽象测试类时遇到问题。抽象类的原因是为了模仿应用程序中使用的类的结构,以减少彻底测试应用程序所需的代码量。

假设我有一个抽象的测试类,假设“ AbstractRepositoryTester”仅用于“存储库”测试套件(我喜欢出于组织目的将它们分开)。

我测试的每个实现“ RepositoryContract”的存储库都会有一个测试,该测试还AbstractRepositoryTester使用一些被覆盖的抽象方法扩展了“ ”。

现在,执行此操作时,将不会在测试期间加载抽象类,而必须将其手动加载到引导文件中。还有另一个抽象扩展了香草Codeception测试类,以便我可以设置一些变量(即,用于laracasts / testdummy)。

在没有手动输入_boostrap文件的情况下,这两个类都将无法加载。除此之外,特定于套件的引导程序文件无法加载文件或似乎根本无法执行,因此我被迫将所有套件的所有引导程序代码放入全局_bootstrap文件中。

我还尝试将Codeceptions自动加载类\Codeception\Util\Autoload::与“ load”方法一起使用,但似乎无法正常工作。

现在,我在全局中使用require_once,_bootstrap所以最后是一个问题:

是否有正确的方法自动加载(或仅加载)一个类,以在全局和每个套件中用作测试的一部分?

在这样抽象我的测试时,我总体上是否正确?TDD对我来说是新手,我正在努力改善开发工作流程(在Laracasts的帮助下)。

我在任何地方搜索了答案,以加载所需的类,但是通常我只会找到PHPUnit特定的答案,而这些答案似乎无效。我还浏览了Codeception文档,该文档对此主题有点稀疏,并且API文档没有解释在以下情况下方法调用的用法:Autoload::load

干杯,

-Everon。

CJ *_*nis 1

您可以对整个测试套件或单个组件执行此操作。例如,仅对于单元测试,请执行以下操作:

  1. 添加:bootstrap: my_bootstrap_file.phptests/unit.suite.yml
# Codeception Test Suite Configuration
#
# Suite for unit or integration tests.

actor: UnitTester
bootstrap: my_bootstrap_file.php
modules:
    enabled:
        - Asserts
        - \Helper\Unit
Run Code Online (Sandbox Code Playgroud)

称之为my_bootstrap_file.php明智的事情,比如bootstrap.php

  1. 创造tests/unit/my_bootstrap_file.php
<?php
\Codeception\Util\Autoload::addNamespace('', 'src');
Run Code Online (Sandbox Code Playgroud)

目录结构应如下所示:

<project root>
src/
tests/
    unit/
        my_bootstrap_file.php
    unit.suite.yml
Run Code Online (Sandbox Code Playgroud)

unit将上述说明中的acceptance、等替换为functional、 等,以将其应用于不同的单个组件。

PhpDoc 用于\Codeception\Util\Autoload::addNamespace()

<project root>
src/
tests/
    unit/
        my_bootstrap_file.php
    unit.suite.yml
Run Code Online (Sandbox Code Playgroud)

如果您希望这适用于整个测试套件,而不仅仅是单元测试,请使用codeception.yml代替tests/unit.suite.ymltests/my_bootstrap_file.php代替tests/unit/my_bootstrap_file.php

<project root>
src/
tests/
    my_bootstrap_file.php
codeception.yml
Run Code Online (Sandbox Code Playgroud)