我在使用Codeception自动加载器加载一些抽象测试类时遇到问题。抽象类的原因是模仿应用程序中使用的类的结构,以减少彻底测试应用程序所需的代码量。
假设我有一个用于测试的抽象类,比如“AbstractRepositoryTester
”,它只用于“存储库”测试套件(我喜欢将组织用途分开)。
我测试的实现“RepositoryContract
”的每个存储库都有一个测试,它还使用一些重写的抽象方法扩展了“AbstractRepositoryTester
”。
现在执行此操作时,抽象类将不会在测试期间加载,必须在引导程序文件中手动加载。还有另一个抽象扩展了vanilla Codeception测试类,以便我可以设置一些变量(即laracasts / testdummy)。
两个类都无法加载,无需手动输入_boostrap文件。除此之外,特定于套件的引导程序文件无法加载文件或看似执行,因此我不得不将所有套件的所有引导代码放入全局_bootstrap
文件中。
我还尝试使用“\Codeception\Util\Autoload::
”方法使用Codeceptions自动加载类load
,但它似乎无效。
现在我在全局_bootstrap
中使用require_once,最后问题是:
是否有正确的方法可以自动加载(或仅加载)一个类,以便在全局和每个套件中用作测试的一部分?
我是否在整体上正确地抽象出我的测试? TDD对我来说是新的,我正在努力改善我的开发工作流程(在Laracasts的帮助下)。
我已经搜索了每个地方的答案来加载我需要的类,但通常我会发现所有的PHPUnit特定的答案似乎不起作用。我还查看了Codeception文档,该文档对主题感到有点稀疏,并且API文档没有解释Autoload::load
干杯,
- Everon。
答案 0 :(得分:0)
您可以为整个测试服或单个组件执行此操作。例如,仅对于单元测试,请执行以下操作:
bootstrap: my_bootstrap_file.php
添加到tests/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
给my_bootstrap_file.php
打电话,例如bootstrap.php
tests/unit/my_bootstrap_file.php
<?php
\Codeception\Util\Autoload::addNamespace('', 'src');
目录结构应如下所示:
<project root>
src/
tests/
unit/
my_bootstrap_file.php
unit.suite.yml
在上面的说明中用unit
,acceptance
等替换functional
,以将其应用于不同的单个组件。
\Codeception\Util\Autoload::addNamespace()
的PhpDoc:
/**
* Adds a base directory for a namespace prefix.
*
* Example:
*
* ```php
* <?php
* // app\Codeception\UserHelper will be loaded from '/path/to/helpers/UserHelper.php'
* Autoload::addNamespace('app\Codeception', '/path/to/helpers');
*
* // LoginPage will be loaded from '/path/to/pageobjects/LoginPage.php'
* Autoload::addNamespace('', '/path/to/pageobjects');
*
* Autoload::addNamespace('app\Codeception', '/path/to/controllers');
* ?>
* ```
*
* @param string $prefix The namespace prefix.
* @param string $base_dir A base directory for class files in the namespace.
* @param bool $prepend If true, prepend the base directory to the stack instead of appending it;
* this causes it to be searched first rather than last.
* @return void
*/
public static function addNamespace($prefix, $base_dir, $prepend = false)
如果您希望将其应用于整个测试套件,而不仅仅是单元测试,请使用codeception.yml
代替tests/unit.suite.yml
,并使用tests/my_bootstrap_file.php
代替tests/unit/my_bootstrap_file.php
。
<project root>
src/
tests/
my_bootstrap_file.php
codeception.yml