在D-7中有phpunit模块吗?
到目前为止,正在使用details Core框架(简单测试),它有DrupalWebTestCase类,
我想让D7上的TDD程序,使用PHP类,请建议。
发布于 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应用程序。
<?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;
}
}
}https://stackoverflow.com/questions/34260831
复制相似问题