首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Drupal 7上的PHPunit

Drupal 7上的PHPunit
EN

Stack Overflow用户
提问于 2015-12-14 06:14:45
回答 2查看 828关注 0票数 2

在D-7中有phpunit模块吗?

到目前为止,正在使用details Core框架(简单测试),它有DrupalWebTestCase类,

我想让D7上的TDD程序,使用PHP类,请建议。

EN

回答 2

Stack Overflow用户

发布于 2015-12-14 17:07:19

还没有准备好在Drupal 7中使用集成类进行PHPUnit测试。

据我所见,社区中对于TDD的普遍共识是使用PHPunit编写不依赖于TDD中Drupal的API的代码。由Drupal中的轻量级集成层完成,无需使用TDD。这样做的目的是减少测试/编写代码与Drupal之间的摩擦。

这通常意味着将Drupal抽象到一组不同的服务或功能中,注入到您开发的业务逻辑类中。

作为一个简单的例子,不要在代码中使用cache_get()cache_set()函数,而是编写代码来使用DrupalCacheInterface实例。以同样的方式,您不必在代码中使用Drupal的数据库API,而是依赖于所需opé口粮的抽象。在测试中,您可以提供所需接口的模拟实现(直接从Drupal,或者特定于您自己的代码)。您的Drupal集成代码负责注入实际的实现。

例如,使用以下代码--虽然MODULE_entity_load不是PHP的teastbale (因为对数据库的访问和缓存的使用)--您可以在PHP中测试_MODULE_entity_load的行为,因为它实际上不依赖于引导的Drupal应用程序。

代码语言:javascript
运行
复制
<?php

  /**
   * Implements hook_entity_load().
   */
  function MODULE_entity_load($entities, $type) {
    return _MODULE_entity_load(
      $entities,
      $type,
      function($entity) {
        return db_query(...);
      },
      _cache_get_object($bin)
    );
  }

  /**
   * "Pure" function to handle entities load.
   */
  function _MODULE_entity_load($entities, $type, $queryData, DrupalCacheInterfac $cacheObject) {
    if ($type != 'node') return;
    forEach($entities as $entity) {
      $cache = $cacheObject->get('MODULE:' . $entity->nid);
      if ($cache && (time() < $cache->expire)) {
        $entity->MODULE_data = $queryData($entity->field_xyz);
        $cacheObject->set('MODULE:' . $node->nid, $entity->MODULE_data);
      }
      else {
        $entity->MODULE_data = $cache->data;
      }
    }
  }
票数 4
EN

Stack Overflow用户

发布于 2015-12-15 05:23:00

是的,@Pierre Buyle现在没有专门支持的模块可用于phpunit,

我在根目录中创建了test文件夹,并添加了几个测试代码,它已开始工作,我可以使用drupal函数进行登录身份验证,我使用了user_authenticate('root', 'admin123');

看上去phpunit的开局很好,将在tdd中开始下一关。

单位动作项目

  1. 下载的编写器并安装
  2. 在wamp/bin/php5.12.x/php/phpunit/medier.json中创建composer.json
  3. 添加到composer.json中的代码片段 {“require”:{ "phpunit/phpunit":"4.8.","phpunit/dbunit":“1.2”}
  4. 在cmd C:\wamp\bin\php\php5.5.12\phpunit>编写器更新中的逗号之后执行
  5. 在phpunit文件夹中创建了大量文件,在系统环境PATH中添加了‘C:\wamp\bin\php\php5.5.12\phpunit\phpunit’。就这样
  6. 在应用程序根目录中创建了“test”文件夹
  7. 创建test.php文件并粘贴到代码段下面。
  8. 在CMD C:\wamp\www\tester>phpunit test /test.php中执行以下命令
  9. 输出上述phpunit命令指令

现在我可以在drupal中运行phpunit了

代码样本

代码语言:javascript
运行
复制
<?php
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
// Bootstrap Drupal.
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

class test extends PHPUnit_Framework_TestCase
{

  public function testLoginChk(){
    print_r(user_authenticate('root', 'admin123'));
    $this->assertEquals(1,user_authenticate('root', 'admin123'));
  }

}

请分享你的想法,我在同一条道路上的drupal phpunit测试方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34260831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档