PHPUnit परीक्षण कैसे चलाएं?


12

Drupal 8 पूरक है के आधार पर परीक्षण ढांचे Simpletest साथ PHPUnit , और Simpletest किया जा सकता है हटा दिया Drupal 9 में।

मैं Drupal 8 के लिए अभी तक अपग्रेड नहीं कर रहा हूं, लेकिन मैं सोच रहा था कि कैसे मैं Drupal 7 के लिए, Simpletest के बजाय PHPUnit में मौजूदा परीक्षण (प्रवृत्ति के साथ अनुवर्ती) लिख सकता हूं?

क्या Drupal 7 के साथ PHPUnit को एकीकृत करने के लिए कोई विधि या मॉड्यूल है?

कुछ फ़ुपुनिट या शराबी जैसे हैं , लेकिन वे ड्रुपल 7 के लिए नहीं हैं।


1
बस बेहट को वहीं फेंक देना चाहते हैं। यह वास्तविक-विश्व परीक्षण परिदृश्य (वास्तव में इकाई परीक्षण नहीं) करने के लिए बहुत अच्छा है: drupal.org/project/drupalextension एक बार जब आप इसे सेटअप कर लेते हैं, तो यह Drupal कार्यक्षमता को एक हवा बनाता है। हम एक CI वातावरण में Behat चला रहे हैं और इसे प्यार करते हैं!
donutdan4114

@ donutdan4114 क्या आप कुछ और जानकारी प्रदान कर सकते हैं या एक निर्देशात्मक वीडियो दिखा सकते हैं कि आप इसे ड्रुपल के साथ कैसे पूरा करते हैं? मैं बहुत इच्छुक हूँ।
zkent

जवाबों:


11

आप अपनी प्रत्येक परीक्षण फ़ाइल में Drupal को बूटस्ट्रैप करके चलाने के लिए PHPUnit परीक्षण प्राप्त कर सकते हैं। यह आदर्श नहीं है, लेकिन यह काम करता है।

define('DRUPAL_ROOT', 'your/path/to/drupal');
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';

// Bootstrap Drupal.
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

// Proceed with PHPUnit tests as usual from here.
class MyTest extends \PHPUnit_Framework_TestCase {
  ...

4
यदि आपको ऐसा करने की आवश्यकता है, तो आप जो लिख रहे हैं, वह यूनिट टेस्ट नहीं हैं, और आपको शायद SimpleTest- आधारित कोर परीक्षण मॉड्यूल से DrupalWebTestCase का उपयोग करना चाहिए।
मटका २२

@ matt2000 हां और परीक्षण जब तक प्रतीक्षा घंटे समाप्त हो गया ...
Codium

3

PHPUnit वस्तुओं के निर्माण के लिए एक अच्छा एपीआई प्रदान करता है जबकि Drupal का सरलतम नहीं है। नहीं है एक पुस्तकालय ड्रुपल 7 के साथ PHPUnit एकीकृत करने के लिए सार में उपलब्ध
उन लिपियों को निष्पादित करने के लिए जिन्हें आपको इस जिस्ट-रिपॉजिटरी को जांचना होगा । कमांड-लाइन में यूनिट-टेस्ट को निष्पादित करने के लिए बस एक ड्रुपल साइट (यानी। <DRUPAL_ROOT>/sites/default) पर जाएं और dphpunit.bash का उपयोग करें जैसे कि आप फ़पुनिट कमांड का उपयोग करेंगे।

स्क्रिप्ट में 3 फाइलें हैं:

  1. dphpunit.bash - जो केवल कुछ अतिरिक्त मापदंडों के साथ drun-dphpunit.php को आमंत्रित करता है। यह आवश्यक है क्योंकि PHP सहानुभूति के साथ सही ढंग से निपटने में असमर्थ है।
  2. drun-dphpunit.php - जो मूल रूप से अपस्ट्रीम phpunit धावक के समान है, सिवाय इसके कि यह अतिरिक्त पैरामीटर को संभालता है।
  3. bootstrap.inc.php - जो ड्रुपल बूटस्ट्रैप को ड्रश के समान बनाता है।

स्रोत: http://devblog.more-onion.com/content/writing-unit-tests-drupal-7


bootstrap.inc.php

<?php

$path = CWD;

$site_dir = NULL;
$dpl_dir = NULL;

while ($path != '/') {
    if (file_exists($path . '/settings.php')) {
        $site_dir = $path;
    }
    if (file_exists($path . '/index.php') && file_exists($path . '/includes/bootstrap.inc')) {
        $dpl_dir = $path;
        break;
    }
    $path = dirname($path);
}

if (!$dpl_dir) {
    echo "No drupal directory found in or above current working directory. Aborting. \n";
    exit(1);
}
if (!$site_dir) {
    $site_dir = $dpl_dir . '/sites/default';
    if (!file_exists($site_dir . '/settings.php')) {
        echo "No configured site found. Aborting.\n";
        exit(1);
    }
}

$_SERVER['HTTP_HOST'] = basename($site_dir);
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';

define('DRUPAL_ROOT', $dpl_dir);
set_include_path($dpl_dir . PATH_SEPARATOR . get_include_path());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

dphpunit.bash

#!/bin/bash

# get dirname of the script
DIR="$(dirname $(readlink "$0"))"

# assume the boostrap script is stored in the same directory
php "$DIR/drun-phpunit.php" "$(pwd)" --bootstrap "$DIR/bootstrap.inc.php" "$@"

drun-phpunit.php

<?php
require_once 'PHP/CodeCoverage/Filter.php';
PHP_CodeCoverage_Filter::getInstance()->addFileToBlacklist(__FILE__, 'PHPUNIT');

if (extension_loaded('xdebug')) {
  xdebug_disable();
}

if (strpos('/usr/bin/php', '@php_bin') === 0) {
  set_include_path(dirname(__FILE__) . PATH_SEPARATOR . get_include_path());
}

require_once 'PHPUnit/Autoload.php';
define('PHPUnit_MAIN_METHOD', 'PHPUnit_TextUI_Command::main');
define('CWD', $_SERVER['argv'][1]);
unset($_SERVER['argv'][1]);

$command = new PHPUnit_TextUI_Command;
$command->run($_SERVER['argv']);

एकीकरण के लिए एक और लाइब्रेरी उपलब्ध है Drupal 7 के साथ PHPUnit: https://github.com/sebastianbergmann/ppunit

इस स्क्रिप्ट के बारे में अधिक जानकारी यहाँ जाँची जा सकती है: http://thomaslattimore.com/blog/use-phpunit-with-drupal-7


5
दुख की बात है कि यह रेपो चला गया।
शेल्डोन्क्रेगर

2
-1 क्योंकि गिस्ट चला गया है।
cwallenpoole

1

कॉन्फ़िगरेशन फ़ाइल के साथ वर्कअराउंड है।

  1. अपने ड्रुपल प्रोजेक्ट रूट में phpunit.xml.dist फ़ाइल बनाएँ । इसे सम्‍मिलित किया
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="phpunit.xsd"
         bootstrap="drupal_phpunit_bootstrap.php"
         verbose="true">

</phpunit>
  1. Phpunit को हमारे ड्रुपल उदाहरण को बूटस्ट्रैप करना है। Drupal phpunit बूटस्ट्रैप फ़ाइल बनाएँ। मैं इसे drupal_phpunit_bootstrap.php नाम देना पसंद करता हूं
<?php

$_SERVER['HTTP_HOST'] = 'your.url';
$_SERVER['SCRIPT_NAME'] = '/index.php';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['SERVER_NAME'] = NULL;
$_SERVER['SERVER_SOFTWARE'] = NULL;
$_SERVER['HTTP_USER_AGENT'] = NULL;
// Fix for behat drupal instantiation.
define('DRUPAL_ROOT', dirname(realpath(__FILE__)));
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

Gist: https://gist.github.com/permanovd/cb9c02920c49a29c97653f4f697147b1

बस इतना ही। अब आप कई तरीकों से अपने परीक्षण शुरू कर सकते हैं।

1. सीएलआई

phpunit -c phpunit.xml.dist QuestionValidationValueOptionsInputTest /yoursite.dir/public_html/profiles/standard/modules/some_module.tests/QuestionValidationTest.php

कहाँ पे:

  • -c : कॉन्फ़िगरेशन फ़ाइल को परिभाषित करता है।
  • QuestionValidationValueOptionsInputTest और पथ : परीक्षण वर्ग नाम और इसे पथ को परिभाषित करता है।

2. आईडीई (phststorm)

आपको परीक्षण चल रहे कॉन्फ़िगरेशन को जोड़ना होगा

टेस्ट रन कॉन्फ़िगरेशन

और हर परीक्षण में ड्रुपल बूटस्ट्रैप कोड को शामिल करने की आवश्यकता नहीं है।

ध्यान दें

आपके वातावरण के गलत php संस्करण के कारण आपको परीक्षण में समस्या हो सकती है।

आगे की पढाई:

https://phpunit.de/manual/current/en/organizing-tests.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.