使用DrupalUnitTestCase的单元测试Drupal在数据库设置时失败

ber*_*kes 5 unit-testing simpletest drupal

使用DrupalUnitTestCase单元测试一个Drupal模块,失败.我可能会忘记一些事情

测试运行良好,直到我创建一个类的实例:

$foo = new FooBar();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Drupal决定做一些魔法并尝试调用数据库,以便在其注册表中找到一些文件.

 Test PDOStatement->execute() failed: <em class="placeholder">PDOException</em>: SQLSTATE[42S02]: Base table  [error]
or view not found: 1146 Table &#039;td_development.simpletest50921registry&#039; doesn&#039;t exist: SELECT
filename FROM {registry} WHERE name = :name AND type = :type; Array
(
    [:name] =&gt; FooBar
    [:type] =&gt; interface
)
Run Code Online (Sandbox Code Playgroud)

DrupalUnitTestCase,而不是DrupalWebTestCase设计数据库,而不是设计.所以这个失败的原因很明显.

但是,我不想让Drupal在数据库中查找我想要的是创建一些实例.如何避免Drupal在其注册表中查找文件?

Ber*_*dir 5

你可能做不到。

将UnitTestCase用作父类的可能性非常有限。一旦完成需要数据库的任何操作(创建新类,因为Drupal 7的自动加载功能取决于数据库),就必须使用WebTestCase。

唯一可行的方法就是显式地包含该类运行所需的所有文件。因为仅当该类尚不存在时才调用自动加载(也可以是您的类使用或依赖的类)。但这是相对脆弱的,您将始终必须以正确的顺序手动包括所有这些文件,这意味着您的单元测试取决于类的内部工作方式。也不是很好。