你在这里

管理测试实例

原文链接http://drupal.org/node/583030

在许多模块中不同的测试实例需要在不同的上下文中运行。比如,一组测试可能需要将测试数据写入数据库;另一组也许需要产生模块表,但找过模块的_install函数。

DrupalWebTestCase和DrupalUnitTestCase 可以扩展来处理这些情况。你可以在modules/simpletest/tests/database_test.test文件中查看这种方法。

集中创建用于测试的样本数据

为了取得一致和节省时间,你可以在一个类中产生所有的样本数据,然后让你的测试实例来继承。

<?php
class MyModuleWebTestCase extends DrupalWebTestCase {
  function
setUp() {
   
parent::setUp('mymodule');
   
// Insert your data into the database here
    // Use db_insert() etc. Hard coded SQL will affect your actual drupal installation, not your test environment
 
}
}

class
MyModuleExampleTestCase extends MyModuleWebTestCase {

 
// No setUp() function necessary, because the setUp is inherited

 
public static function getInfo() {
    ...
  }

  function
testExample() {
   
// Your test(s) here
 
}
}
?>

注:在你的父类(MyModuleWebTestCase 以上)不要声明getInfo()或任何测试方法(如:testExample()),否则会产生错误。

模块化你的测试实例

最好的测试实例是小型模块化--在测试实例中,每一种方法如testExample()应该能测试小片代码或功能。

测试数据库不要增加模块安装开销

这是种高级技术,大多数测试者不需要用到。

测试不需要任何数据库功能,只需要扩展DrupalUnitTestCase,但如果需要测试你的模块和数据库的交互而不启用整个模块,你可以使用drupal_install_schema() 函数来创建所需表格。

<?php
class MyModuleDatabaseTestCase extends DrupalWebTestCase {
  function
setUp() {
   
// Create the module's tables without running hook_install or hook_enable
   
drupal_install_schema('mymodule');
  }
}

class
MyModuleSchemaTestCase extends MyModuleDatabaseTestCase {

 
// No setUp() function necessary, because the setUp is inherited

 
public static function getInfo() {
    return array(
     
'name' => 'Database functions test',
     
'description' => 'Tests CRUD functions',
     
'group' => 'My Module',
    );
  }

 
/*
   * Tests that parent class created module tables
   */
 
function testSchemaCreated() {
   
// Your test(s) here
 
}
}
?>