Magento 1.9 এ ইউনিট পরীক্ষার জন্য সেরা অনুশীলন


11

আমি বেশ কয়েকটি কাস্টম মডিউল সহ একটি ম্যাজেন্টো 1.9 সাইট বজায় রাখছি। কার্যকারিতা কিছু ব্যবসায়িক সমালোচনা এবং কিছু ইউনিট পরীক্ষার গুরুতর প্রয়োজন। যেমন একটি ইউনিটের মূল্য ক্যালকুলেটর।

আমি সাধারণত সিমফনিতে বিকাশ করি এবং যদি সম্ভব হয় তবে সত্যিই কোনওভাবে পিএইচপিউনিট (ডাব্লু / কম্পোজার) ব্যবহার করতে পছন্দ করব।

কিছু কার্যকারিতা বিভিন্ন কাস্টম ডাটাবেস টেবিলগুলিতে আমদানি করা ডেটার উপর ভিত্তি করে থাকে তাই আমি কোনওভাবে ফিক্সচার লোড করতে পছন্দ করব।

সুতরাং আমি কিছু ইউনিট পরীক্ষা লেখার জন্য সর্বোত্তম অনুশীলনের পদ্ধতির সন্ধান করছি। আমি আনন্দের সাথে টিউটোরিয়াল বা অনুরূপ কিছু গ্রহণ করব। কোন সাহায্য প্রশংসা করা হয়।

উত্তর:


10

আমি কিছুক্ষণ আগে একই সমস্যার মুখোমুখি হয়েছি।

আমি ইকোদেব পিএইচপিউইনাইট মডিউলটি ব্যবহার করার বিষয়টি বিবেচনা করেছি তবে আমি ব্যবহার করতে অসুবিধা পেয়েছি এবং খারাপভাবে নথিভুক্ত হয়েছে (তবে আমি এখনও ইভান যা করে তা এবং ম্যাগেন্টো বাস্তুতন্ত্রের ক্ষেত্রে তার দুর্দান্ত অবদানকে আমি পছন্দ করি)।

সুতরাং, বিনয়ের সহায়তায়, আমি নিম্নলিখিত পরীক্ষার কাঠামোর মডিউলটি বিকাশ করে শেষ করেছি: https://github.com/digitalpianism/testframework

আসল উদ্দেশ্যটি ইন্টিগ্রেশন পরীক্ষার জন্য ছিল তবে আমি এটি ইউনিট পরীক্ষার জন্যও ব্যবহার করছি। আপনি এটিকে এখানে কর্মে দেখতে পাচ্ছেন: https://github.com/digitlpianism/easytoplinks/blob/master/app/code/commune/DigitalPianism/EasyToplinks/Test/Unit/Block/Page/Template/LinksTest.php

ফিক্সচার সম্পর্কিত, আমি ডাটাবেসে নমুনা ডেটা তৈরি এড়াতে লেনদেন রোলব্যাক ব্যবহার করছি।


এটি সত্যিই আশাব্যঞ্জক দেখাচ্ছে। আমি এটি চেষ্টা করে দেখুন। ধন্যবাদ।
ফ্রিগ

13

স্থাপন

যেহেতু Magento 1 বাক্সের বাইরে সুরকার ব্যবহার করে না, আমি মনে করি যদি আপনি সুরকার ব্যবহার phpunit ইনস্টল বা শুধু ডাউনলোড এটি একটি বড় পার্থক্য তোলে না phar সংস্করণ।
আপনি যদি ইতিমধ্যে আপনার সাইটে অন্য তৃতীয় পক্ষের মডিউল বা লাইব্রেরি পরিচালনা করতে সুরকার ব্যবহার করেন, তবে সুরকার সম্ভবত সবচেয়ে সার্থক হন। আপনি যদি পিএইচপি 7 ব্যবহার না করেন তবে আপনি phpunit এর পুরানো সংস্করণে সীমাবদ্ধ থাকবেন (এ কারণেই আমি উপরের 4.8 সংস্করণের সাথে লিঙ্ক করেছি)।

ইন্টিগ্রেশন টেস্ট বনাম / এবং / অথবা ইউনিট টেস্ট

যেহেতু ম্যাজেন্টো 1 এমন একটি ভারী ওজনের অ্যাপ্লিকেশন, তাই Phpunit বুটস্ট্র্যাপকে একীকরণের জন্য এবং ইউনিট পরীক্ষার জন্য একটিতে পৃথক করা অর্থপূর্ণ।
ইউনিট পরীক্ষার বুটস্ট্র্যাপটি কেবল অটোলোডারকে আরম্ভ করতে হবে, যখন ইন্টিগ্রেশন টেস্ট বুটস্ট্র্যাপের জন্য কনফিগারেশন লোডিং এবং ডিবি সংযোগ সহ পুরো অ্যাপ্লিকেশন পরিবেশের সূচনা করতে হবে।
এজন্য যে ম্যাজেন্টোতে ইন্টিগ্রেশন পরীক্ষাগুলি অনেক ধীর হয়ে পরে ইউনিট পরীক্ষাগুলি চালায়। (আরও বেশি তাই অন্য অ্যাপ্লিকেশনগুলিতে)।

বুটস্ট্র্যাপিং ম্যাজেন্টোকে ফোপুনিতে

  • ম্যাজেন্টোর অটলয়েডার পিএসআর -0 এর সাথে সামঞ্জস্যপূর্ণ নয় কারণ এটি কোনও ব্যতিক্রম অবস্থিত ফাইলটি খুঁজে না পাওয়া যদি একটি ব্যতিক্রম ছুঁড়ে দেয় This এটি class_existsphpunit এর কিছু ব্যবহার ভেঙে দেয়। সম্ভাব্য কয়েকটি (যদি হ্যাকি) ওয়ার্কআউন্ড রয়েছে:

    • \Varien_Autoload::autoload()ভিতরে ছুঁড়ে দেওয়া ব্যতিক্রম উপেক্ষা করে কোনও সাজসজ্জারের মোড়কে ম্যাগেন্টো অটলয়েডারকে নিবন্ধভুক্ত করুন এবং একটি নতুন অটোলোডার হিসাবে মোড়কটিকে নিবন্ধ করুন। এটি তৃতীয় পক্ষের লাইব্রেরিগুলির সাথে দ্বন্দ্বের কম সম্ভাবনা রয়েছে যারা অটোলয়েডারদের নিবন্ধন করে এবং একটি নির্দিষ্ট অটোলোডার আদেশের উপর নির্ভর করে।
    • Magento 1 এ নির্মিত একটি মোড়ানো একটি কাস্টম ত্রুটি হ্যান্ডলার ব্যবহার করুন। কাস্টম ত্রুটি হ্যান্ডলারগুলি Magento অটোলোডার দ্বারা চালিত ত্রুটিগুলি গ্রাস করে। এটিই সমাধান যা রাফেলের পরীক্ষার কাঠামোটি ব্যবহার করে । এটি অন্যান্য তৃতীয় পক্ষের এক্সটেনশনের সাথে সর্বাধিক সামঞ্জস্যপূর্ণ বলে মনে হচ্ছে।
    • \Varien_Autoload::autoload()ফাইলটি উপস্থিত না থাকলে ত্রুটি ছুঁড়ে না দেওয়ার জন্য অন্তর্ভুক্ত পাথ হ্যাক ব্যবহার করুন । এটি বেশ কয়েকটি মডিউলগুলির সাথে দ্বন্দ্ব করে যা একই শ্রেণিকে ওভাররাইড করে। আমি এই পদ্ধতির নিজেকে ব্যবহার করি না।
  • $_SESSON = []বুটস্ট্র্যাপে সহজভাবে সেট করা পরীক্ষার সময় সেশন থেকে ত্রুটিগুলি এড়ানোর জন্য ।

  • এর মাধ্যমে একটি কাস্টম প্রতিক্রিয়া অবজেক্ট সেট করুন Mage::app()->setResponse($testResponse)যা আসলটি প্রসারিত করে তবে আউটপুট বা শিরোনাম প্রেরণ করে না।

  • ইন্টিগ্রেশন টেস্টগুলির মধ্যে ম্যাজেন্টোকে পুনরায় পুনঃনির্মাণ করতে যা রানটাইমের স্থিতি পুরোপুরি পরিবর্তন করে, ব্যবহার করুন Mage::reset(); Mage::app()। নোট করুন যে এর পরে ত্রুটি হ্যান্ডলারটি আবার সজ্জিত করতে হবে।

রাজধানী

ডিবি রাজধানী আমি চোকান পদ্ধতিতে নিয়মিত মডেল ব্যবহার করতে রাজধানী তৈরি করতে, যেমন ঝোঁক createSimpleProduct($sku)। যেমন রাফেল বলেছিলেন, ব্যবহার setUp()এবং tearDown()পরীক্ষাটি এমন একটি লেনদেনের মধ্যে মোড়ানোর জন্য যা পরীক্ষার পরে ফিরে আসে (উদাহরণস্বরূপ Mage::getSingleton('core/resource')->getConnection('default_setup')->beginTransaction())।

দোকান কনফিগারেশন রাজধানী জন্য, আমি ব্যবহার ইন-মেমোরি শুধুমাত্র রাজধানী সেট আপ করার ঝোঁক Mage::app()->getStore()->setConfig($path, $value)

EcomDev_PHPUnitএক্সটেনশন এছাড়াও yaml ফাইল ব্যবহার ডিবি রাজধানী তৈরি করার বিকল্পও, কিন্তু নিজের জন্য আমি ঐ কঠিন মডেল শ্রেণীর ব্যবহার করে নির্মিত রাজধানী তুলনায় বজায় রাখার জন্য এটি। YMMV।

টেস্ট দ্বিগুণ

রেজিস্ট্রি মাধ্যমে তৈরি করা অবজেক্টের জন্য পরীক্ষা ডাবলস উদ্বুদ্ধ করতে ব্যবহার করা যেতে পারে Mage::getSingleton(), Mage::getResourceSingleton()এবং Mage::helper()
কিছু অন্যান্য কেন্দ্রীয় অবজেক্ট সেট করা যেতে পারে Mage::app()(যেমন অনুরোধ)। পরীক্ষাগুলির
মাধ্যমে Mage::getModel()বা এর Mage::getResourceModel()সাথে তৈরি ক্লাসগুলি প্রতিস্থাপন করতে , একটি কাস্টম কনফিগার অবজেক্ট র‌্যাপার ব্যবহার করতে হবে। কীভাবে এটি সম্পাদন করা যায় তা রাফেলের পরীক্ষার কাঠামোর এই উদাহরণটি দেখুন ।

সারসংক্ষেপ

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


আমি কখনই চেষ্টা করে দেখি না তবে কেন ম্যাগেন্টো টেস্ট ফ্রেমওয়ার্ক ব্যবহার করব না? ( Docs.magento.com/m1/ce/user_guide/magento/... )
Fra

3
হ্যাঁ আমি এটি চেষ্টা করেছি, তবে এটি কার্যকরী টেস্টিং (ইউনিট বা সংহত নয়), এটি ধীর, জটিল এবং পরীক্ষাগুলি ঝাপটায় এবং ভঙ্গুর হয়ে থাকে। সব মিলিয়ে আমি এটির সাথে কাটানো সময়কে একটি অপচয় হিসাবে বিবেচনা করেছি।
বিনাই

@ ভনাই আমি এর দেরীটি জানি, তবে সাধারণত একটি নিয়ামকের মধ্যে মডেল এবং সংগ্রহের কল রয়েছে, যা পরীক্ষার সময় আমাদের প্রয়োজন হবে না। আমি আপনার পরীক্ষার কাঠামোটি ব্যবহার করছি (ডিজিটালপিয়ানিজম), এবং সেখানে আমরা মডেলগুলিকে টেস্টডুবল করতে পারি তবে নিয়ামক পদক্ষেপের জন্য অনুরোধ করার সময় যা কোনও মডেল ব্যবহার করে, আমি কীভাবে সেই মডেল / সংগ্রহ কলটিকে উপহাস করতে পারি?
আরকাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.