首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

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
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34260831

复制
相关文章

相似问题

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