跳转到主要内容
gokookie 提交于 1 May 2012

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

注:本指南的代码由Examples for Developers module维护,也就是说:

  • 从该模块中复制一份代码,编辑、修改然后进行测试.
  • 报告所发现问题,进行修复,欢迎进行补丁修正和提出改进意见。

Simpletest通过DrupalWebTestCase提供了强大的测试功能,但有时你可能只想写一个传统而简单的单元测试。Simpletest也提供了这样的功能。在本页中我们就通过举例来介绍单元测试方法。

要测试什么呢?

单元测试的目的是要测试一段独立的功能,如函数或方法。例如:某个模块带有实现如下功能的函数。

<?php function simpletest_example_empty_mysql_date($date_string) { if (empty($date_string) || $date_string == '0000-00-00' || $date_string == '0000-00-00 00:00:00') { $date_is_empty = true; } else { $date_is_empty = false; } return $date_is_empty; } ?>

 我们应该在各种条件下来测试该函数。在上述例子中,我们仅测试一些值:NULL,空字符串, '0000-00-00',和一个有效的日期。

构建测试

首先我们需要来创建一个测试文件。在模块目录下,产生一个新的.test文件。在本例中,即simpletest_example.test文件。

为了让Drupal知道这个测试,需要在模块的.info文件中将你的测试文件加到'file[]’参数中。在本例中,我们在simpletest_example.info中添加:

files[] = simpletest_example.test

 现在我们回到’simpletest_example/simpletest_example.test’文件,为单元测试产生一个类。这个类将扩展DrupalUnitTestCase.

<?php class SimpletestUnitTestExampleTestCase extends DrupalUnitTestCase { } ?>

 像扩展DrupalWebTestCase一样,我们的SimpletestUnitTestExampleTestCase类需要通过getInfo()方法实现。该方法在simpletest页上有详细描述:

<?php public static function getInfo() { // Note: getInfo() strings should not be translated. return array( 'name' => 'Simpletest Example unit tests', 'description' => 'Test that simpletest_example_empty_mysql_date works properly.', 'group' => 'Examples', ); } ?>

 我们写完getInfo()后,就可以正式写我们的单元测试。所有的单元测试方法应该以小写’test’开始。所有用这种方法开始的都自动被simpletest识别,然后按要求运行。尽管不同的判断语句可以放到不用的方法中,但是推荐一次性测试不同的判断语句,这可由如下方法实现:

<?php function testEmptyMySQLDate() { $result = simpletest_example_empty_mysql_date(NULL); // Note: Test output messages should not be translated. $message = 'A NULL value should return TRUE.'; $this->assertTrue($result, $message); $result = simpletest_example_empty_mysql_date(''); $message = 'An empty string should return TRUE.'; $this->assertTrue($result, $message); $result = simpletest_example_empty_mysql_date('0000-00-00'); $message = 'An "empty" MySQL DATE should return TRUE.'; $this->assertTrue($result, $message); $result = simpletest_example_empty_mysql_date(date('Y-m-d')); $message = 'A valid date should return FALSE.'; $this->assertFalse($result, $message); } ?> 好,以上就是我们的全部测试代码。很明显,在语句前你需要做复杂的安装,但是单元测试还是比由DrupalWebTestCase提供的全面性的功能测试简单的多。 写完单元测试,清空缓存后,对Drupal6和Drupal7分别进入如下目录来运行测试。