আমি যখন আমার মডিউলগুলি লিখছি তখন আমি অ্যাপ্লিকেশনটির সবচেয়ে জটিল অংশগুলির জন্য তাদের ইউনিট-পরীক্ষার সরবরাহ করার চেষ্টা করছি। তবে এই মুহুর্তে (ম্যাজেন্টো ২.১.৩) ইউনিট পরীক্ষাগুলি কীভাবে লিখবেন সে সম্পর্কে বিভিন্ন উপায় রয়েছে:
পরীক্ষার বিভিন্ন উপায়
- এর সাথে একীভূত করুন
bin/magento dev:tests:run unit
এবং এটি ম্যাজেন্টোর সাথে বান্ডিল হওয়া ডিফল্ট phpunit সেটিংসের শীর্ষে চালান run - এগুলিকে আলাদা করে লিখুন, এগুলি দিয়ে চালান
vendor/bin/phpunit app/code/Vendor/Module/Test/Unit
এবং ম্যাগান্টো যা কিছু আছে তা উপহাস করুন। - এগুলি পৃথকভাবে লিখুন, সমস্ত কিছুকে উপহাস করুন এবং PHPUnit এর সিস্টেম-গ্লোবাল সংস্করণ ব্যবহার করুন।
- এগুলি আলাদাভাবে লিখুন, এগুলি দিয়ে চালান
vendor/bin/phpunit
, তবে এখনও ব্যবহার করুন\Magento\Framework\TestFramework\Unit\Helper\ObjectManager
।
ম্যাজেন্টো 2 এবং পিএইচপিউনিট
তদ্ব্যতীত, ম্যাজেন্টো 2 পিএইচপিউইনিট 4.1.0 এর সাথে বান্ডেল আসে, যা পিএইচপি 7- সামঞ্জস্যপূর্ণ নয়। টাইপ-হিন্টিং নেটিভ (যেমন string
এবং `ইন্ট) এবং আপনার স্বাক্ষরগুলিতে রিটার্নের প্রকারগুলি ঘোষণার ফলে ত্রুটি ছুঁড়ে যাবে। উদাহরণস্বরূপ, একটি ইন্টারফেস / শ্রেণি যেমন একটি পদ্ধতির স্বাক্ষর সহ:
public function foo(string $bar) : bool;
... পিএইচপিউইনিট ৪.১.০ দ্বারা উপহাস করা যাবে না। :-(
আমার বর্তমান অবস্থা
এর কারণেই আমি এখন বেশিরভাগ তৃতীয় উপায়ে আমার ইউনিট পরীক্ষাগুলি লিখছি (সিস্টেম-গ্লোবাল পিএইচপিউনিট সংস্করণে ফোন করে)।
আমার সেটআপে, আমার পিএইচপিউইনিট 5.6 বিশ্বব্যাপী ইনস্টল করা আছে, তাই আমি যথাযথ পিএইচপি 7-কোডটি সমাধান করতে পারি তবে আমাকে কিছু টুইট করতে হবে। উদাহরণ স্বরূপ:
phpunit.xml
এটি দেখতে দেখতে যাতে আমি সুরকার অটোলোডার ব্যবহার করতে পারি:
<?xml version="1.0"?>
<phpunit bootstrap="../../../../../../vendor/autoload.php"
colors="true">
<testsuites>
<testsuite name="Testsuite">
<directory>.</directory>
</testsuite>
</testsuites>
</phpunit>
... এবং আমার সমস্ত setUp()
thodতিহ্যগুলিতে আমার কাছে নিম্নলিখিত চেক রয়েছে যাতে আমি আমার পরীক্ষাগুলি সামঞ্জস্যের সাথে সামঞ্জস্য করে লিখতে পারি:
// Only allow PHPUnit 5.x:
if (version_compare(\PHPUnit_Runner_Version::id(), '5', '<')) {
$this->markTestSkipped();
}
এইভাবে, যখন আমার পরীক্ষাগুলি Magentos এর অন্তর্নির্মিত PHPUnit দ্বারা পরিচালিত হয়, এটি ত্রুটি ছুঁড়ে না।
আমার প্রশ্ন
সুতরাং এখানে আমার প্রশ্ন: এটি ইউনিট পরীক্ষা লেখার একটি 'স্বাস্থ্যকর' উপায়? কারণ এটি আমার কাছে ঠিক বলে মনে হচ্ছে না যে ম্যাজেন্টো পরীক্ষার ক্ষেত্রে সহায়তা করার জন্য পুরো গুচ্ছ সরঞ্জামগুলির সাথে বান্ডিল হয়ে আসে এবং আমি সেগুলি ব্যবহার করতে পারি না কারণ আমি পিএইচপি 7 ব্যবহার করছি। আমি জানি যে গিটহাবের টিকিট রয়েছে যা এই সমস্যাটিকে সম্বোধন করে তবে আমি ভাবছি যে সম্প্রদায়টি কীভাবে বর্তমানে এটির পরীক্ষাগুলি লিখছে।
ম্যাজেন্টো 2-তে ইউনিট টেস্ট লেখার কোনও উপায় আছে যাতে আমার কোডটি 'ডাউনগ্রেড' করতে না হয় এবং এখনও অবজেক্ট ম্যানেজারের ছোঁয়া সমস্ত বিষয়টিকে ঠাট্টা করার জন্য ম্যাজেন্টোসের অন্তর্নির্মিত সহায়কগুলি ব্যবহার করতে পারি? অথবা এমনকি আপনার ইউনিট পরীক্ষায় অবজেক্ট ম্যানেজারটি ব্যবহার করা কি খারাপ অভ্যাস?
আপনার নিজস্ব কাস্টম মডিউলগুলি কীভাবে পরীক্ষা করতে হবে তার সঠিক উপায়টি সম্পর্কে আমি অনেক গাইডেন্স / উদাহরণ অনুপস্থিত।