একটি জুমলা 2.5 উপাদান কীভাবে পরীক্ষা করবেন


12

আমি স্ট্যাক ওভারফ্লোতে এই প্রশ্নটি জিজ্ঞাসা করেছি এবং এটি এখানে জিজ্ঞাসা করার পরামর্শ দেওয়া হয়েছিল।

আমি ইউনিট / সিস্টেম / ইন্টিগ্রেশন পরীক্ষার সাথে পরিচিত, এবং আমার জুমলা উপাদানটি পরীক্ষা করতে সক্ষম হতে চাই। এটি করার কোনও মানক উপায় আছে?

আমি এই জুমলা এমভিসি উপাদান উদাহরণ দিয়ে কাজ করছি , যা পরীক্ষাগুলি অন্তর্ভুক্ত করে না। জুমলা ডকুমেন্টেশনে এবং বিভিন্ন ওয়েবসাইটে আমি যেগুলি খুঁজে পেতে পারি তা হ'ল পরীক্ষার কোড এবং বুটস্ট্র্যাপ.এফপি ফাইলগুলির টুকরো। বিশেষত আমি যা জানতে চাই তা হ'ল:

  • উপাদান পরীক্ষার কোডটি কোথায় রাখবেন
  • আমাকে কী আমার নিজের বুটস্ট্র্যাপ.এফপি সরবরাহ করতে হবে, বা 'জুমলা অন্তর্ভুক্ত করা' এবং আমার পরীক্ষা চালানোর কোনও উপায় আছে?

আদর্শভাবে কেউ আমাকে একটি ওপেন সোর্স জুমলা অংশের দিকে পরিচালিত করতে পারে যার পরীক্ষা ও নির্দেশাবলী রয়েছে কীভাবে সেগুলি চালাবেন (প্রথম দিকে তাত্ক্ষণিক দৃষ্টি আকর্ষণ করা হয়েছিল, পরীক্ষাও হয়নি)।

নিকটস্থ আমি করেছি পাওয়া যায় এই , যা আমি আমার ডামি পরীক্ষা ভিত্তিক গেছেন।

আমি এ পর্যন্ত কি করেছি

উপাদান ডিরেক্টরি কাঠামো:

  • ওহে বিশ্ব/
    • অ্যাডমিন/
      • ...
      • পরীক্ষা /
        • bootstrap.php
        • phpunit.xml
        • modelHelloWorldsTest.php
    • সাইট /
      • ...
    • helloworld.xml

প্রথম প্রচেষ্টা

পরীক্ষা চালানোর জন্য, আমি আমার জুমলা ইনস্টলেশনটিতে উপাদানটি ইনস্টল / অনুলিপি করি। আমি তারপরে ~ জুমলা / প্রশাসন / উপাদানগুলি / কম_হেলিওল্ড / পরীক্ষাগুলি থেকে নিম্নলিখিত কমান্ডটি চালাচ্ছি:

php phpunit-4.2.phar --bootstrap bootstrap.php .

যা থেকে আমি গ্রহণ

Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5

আমি এটি সংগ্রহ করেছি এর অর্থ আমার বুটস্ট্র্যাপ.এফপি সঠিক নয় এবং প্রয়োজনীয় জুমলা ক্লাসগুলি লোড করে নি। আমি এটি এক পর্যায়ে তদন্ত করব, তবে এটি চালানোর জন্য কিছু পরীক্ষা নেওয়ার জন্য অনেকগুলি সেটআপের মতো মনে হচ্ছে।

bootstrap.php:

<?php
error_reporting(E_ALL);

define('_JEXEC', 1);
define('BASEPATH',realpath(dirname(__FILE__).'/../../'));
define('JOOMLA_PATH',realpath(dirname(__FILE__).'/../../../../../'));
define('JOOMLA_ADMIN_PATH',realpath(dirname(__FILE__).'/../../../../'));
$_SERVER['HTTP_HOST'] = 'localhost';
$_SERVER['REQUEST_METHOD'] = 'GET';

if (file_exists(JOOMLA_ADMIN_PATH . '/defines.php'))
{
    include_once JOOMLA_ADMIN_PATH . '/defines.php';
}

if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', JOOMLA_ADMIN_PATH);
    require_once JPATH_BASE . '/includes/defines.php';
}

require_once JPATH_BASE . '/includes/framework.php';
require_once JPATH_BASE . '/includes/helper.php';
require_once JPATH_BASE . '/includes/toolbar.php';
define('JPATH_COMPONENT',JOOMLA_ADMIN_PATH.'/components/com_content');
$app = JFactory::getApplication('administrator');
include BASEPATH.'/controller.php';

modelsHelloWorldsTest.php:

<?php
class HelloWorldsTest extends \PHPUnit_Framework_TestCase {

    public function testList(){
        $c = new ContentController();
        $model = $c->getModel('helloworlds');
        $worlds = $model->getItems();
        var_dump($worlds);
        $this->assertNotEmpty($worlds);
    }
}

phpunit.xml:

<phpunit bootstrap="bootstrap.php"
    colors="true"
    convertErrorsToExceptions="true"
    convertNoticesToExceptions="true"
    convertWarningsToExceptions="true"
    processIsolation="false"
    stopOnFailure="false"
    syntaxCheck="false"
    verbose="true">
</phpunit>

দ্বিতীয় প্রচেষ্টা

এই উত্তরটি দেখার পরে , আমি আমার পরীক্ষাগুলি আমার জুমলা ইনস্টলেশন অধীনে পরীক্ষা / ইউনিটের অধীনে রেখেছি, জুমলা-সেমি রেপো থেকে phpunit.dist.xML এবং bootstrap.php তাদের যথাযথ স্থানে রেখেছি, এবং এখনও পেয়েছি

Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5

ত্রুটি আমি আগে পেয়েছিলাম।

উত্তর:


3

উপাদান পরীক্ষার কোডটি কোথায় রাখবেন

সাধারণত সেরা অনুশীলনগুলি বলে:

/src/
/tests/

তবে আমি / src এড়িয়ে গিয়েছিলাম এবং কেবলমাত্র / পরীক্ষাগুলি / উপাদান ডিরেক্টরিতে। সামনের প্রান্তে, একটি "এবিসি" উপাদানটির জন্য এটি দেখতে এমন কিছু দেখাচ্ছে:

/components/com_abc/
/components/com_abc/abc.php
/components/com_abc/controller.php
/components/com_abc/router.php
/components/com_abc/tests/
/components/com_abc/tests/controllerTest.php

আমার কি আমার নিজের বুটস্ট্র্যাপ.এফপি সরবরাহ করা দরকার?

আমি করেছিলাম. প্রকার, রকম. আমি কেবলমাত্র আমার ইউনিট পরীক্ষার স্ক্রিপ্টের শীর্ষে রুট ইনডেক্স.এফপি ফাইলে গুডিগুলি অনুলিপি করেছি। আপনার আমার খুব কাছের ছিল। আমার পরবর্তী পদক্ষেপটি হবে একটি পৃথক ফাইলে apুকে থাকা যা আমার প্রয়োজন হবে ()।

<?php

error_reporting(E_ALL);

define('_JEXEC', 1);
define('_PHPUNIT', 1);
define('JPATH_BASE', "/var/www/html/abcsite");

require_once JPATH_BASE . '/includes/defines.php';
require_once JPATH_BASE . '/includes/framework.php';

// Instantiate the application.
$app = JFactory::getApplication('site');

// Include dependancies
require_once '../controller.php';

// This is specific to this component
define('JPATH_COMPONENT', JPATH_BASE . "/components/com_abc");

class controllerTest extends PHPUnit_Framework_TestCase
{
    public function testCronjob()
    {

        // Need access to the controller
        $controller = JController::getInstance('Abc');

        // Should return
        $this->assertEquals('test', $controller->execute("cronjob"));

    }
...

আদর্শভাবে কেউ আমাকে একটি ওপেন সোর্স জুমলা অংশের দিকে পরিচালিত করতে পারে যার পরীক্ষা ও নির্দেশাবলী রয়েছে কীভাবে সেগুলি চালাবেন (প্রথম দিকে তাত্ক্ষণিক দৃষ্টি আকর্ষণ করা হয়েছিল, পরীক্ষাও হয়নি)।

আমি আমার নিজের রোল করা যথেষ্ট সহজ পেয়েছি। এমনকি phpunit.xML সেট আপ করার জন্যও মাথা ঘামাইনি।


অবশেষে আমি এটি চেষ্টা করে দেখতে পেলাম (এখন দীর্ঘকাল জুমলা ব্যবহার করিনি!)। দেখে মনে হচ্ছে কৌতুক!
uozuAho

আমি এই Error: Call to undefined method JController::getInstance()জন্য পেতে ।
ওলে হার্স্টেট

6

দুঃখিত, যদি আমার উত্তরটি সরাসরি আপনার সমস্যার সমাধান করে না, তবে ইউনিট টেস্টিং কী এবং এটি কীভাবে ব্যবহার করতে হবে তা বোঝা গুরুত্বপূর্ণ, আমরা জুমলা সম্পর্কে কথা বলছি বা না করি তা বিবেচনা করা উচিত না। আপনি প্রচুর ইস্যু সম্বোধন করেছেন এবং এগুলির সমস্তটি মোকাবেলা করা বরং কঠিন।

সর্বপ্রথমে এটা ডকুমেন্টেশন পড়া গুরুত্বপূর্ণPHPUnit । নিজেকে একটি ছোট শ্রেণি তৈরি করুন (স্বতন্ত্রভাবে জুমলার) এবং এর জন্য কয়েকটি পরীক্ষা লেখার চেষ্টা করুন। এই জাতীয় দৃশ্যে প্রথমে পিএইচপিউইনিট চলুন। এটি কি করে তা বুঝতে পারেন। আমি আশঙ্কা করছি আপনি কীভাবে এটি আপনার বিকাশে সহায়তা করে তা বোঝার পরিবর্তে আপনি পিএইচপিউইনিট চালানোর দিকে খুব বেশি মনোযোগ দিচ্ছেন।

জুমলা চালানোর জন্য আপনার প্রয়োজন হবে:

  • bootstrap.php - এটি আপনাকে জুমলার একটি উদাহরণ দেবে।
  • phpunit.xml - পিএইচপিউনিট সেটিংস সূক্ষ্ম সুরকরণ। পুরো প্রকল্পের জন্য একবার নির্দিষ্টকরণের উদাহরণস্বরূপ দরকারী যেখানে প্রতিটি উপাদানগুলির টেস্ট ফোল্ডার রয়েছে। যাতে আপনি পরীক্ষার স্যুট চালাতে পারেন।

আপনি যে ত্রুটিটি পাচ্ছেন তা যথাসম্ভব পরিষ্কার। 'কন্টেন্টকন্ট্রোলার' স্পষ্টভাবে জুমলা দ্বারা স্বয়ংক্রিয়ায়িত নয়। জুমলার অটোলোডারকে যদি ডাকা হয় এবং কেন এটি ক্লাস লোড করতে ব্যর্থ হয় তা একটি ডিবাগারের সাথে পরীক্ষা করুন। সবচেয়ে খারাপ ক্ষেত্রে আপনার নিজের অটোলোডার সরবরাহ করে এবং এটি কল করতে বুটস্ট্র্যাপ ফাইলটি ব্যবহার করুন। একটি দ্রুত ফিক্সও প্রয়োজনীয় ফাইলটি ম্যানুয়ালি প্রয়োজনীয়_অনসেস দিয়ে লোড করছে।

আপনি কী পরীক্ষা করতে চান এবং মকআপগুলি ব্যবহার করতে চান তা স্থির করুন

প্রদত্ত উদাহরণে আপনি জেমোডেল ব্যবহার করছেন ডাটাবেস থেকে ডেটা আনতে। এটি টিডিডি দৃষ্টিকোণ থেকে কোনও অগ্রগতি নয়। আপনি ডাটাবেস থেকে ডেটা আনতে পারেন তা পরীক্ষার কোনও মূল্য আইএমএইচও নেই। আপনি সেখানে ঠিক কী পরীক্ষা করছেন?

আপনার যদি ডাটাবেস থেকে ডেটা নিয়ে কাজ করা দরকার হয়, ডাটাবেস থেকে প্রতিক্রিয়া মডেল করতে mock ব্যবহার করুন। এইভাবে আপনার পরীক্ষাগুলি সময়ের সাথে সামঞ্জস্যপূর্ণ আচরণ করবে। আপনি ডাটাবেসে কিছু পরিবর্তন করেছেন বলেই আপনি ব্যর্থ পরীক্ষাগুলি চান না।

আপনার যদি এমন একটি পদ্ধতি থাকে যা কিছু পরীক্ষা বা বুদ্ধিমান কিছু অন্যরকম কিছু গণনা করে। এটি ইউনিট টেস্টিং: আপনি আপনার জটিল সিস্টেম থেকে একটি ছোট ইউনিট নিয়ে যান, জাল পরীক্ষার ডেটা দিয়ে এটি খাওয়ান এবং এটির আচরণের পরীক্ষা করে।

আপনার সিস্টেম সামগ্রিকভাবে কাজ করে তা দেখতে, সিস্টেম পরীক্ষাগুলি ব্যবহার করা দরকার।


দুঃখিত তবে এই উত্তরটি খুব প্রাসঙ্গিক নয়। আমি আগে পিএইচপিউইনিত ব্যবহার করেছি এবং পরীক্ষার বিষয়টি বুঝতে পারি। আমি কেবল আমার পরীক্ষা চালানোর জন্য লড়াই করে যাচ্ছি। আমার প্রশ্নের পরীক্ষাটি গুরুত্বপূর্ণ নয়, গুরুত্বপূর্ণ অংশটি এটি চলে। এই প্রশ্নটি পরিষ্কার করার আশায় আমি আমার প্রশ্ন সম্পাদনা করেছি।
uozuAho
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.