কিভাবে phpunit দিয়ে একক পরীক্ষা পদ্ধতি চালাতে?


334

আমি একটি একক পরীক্ষা পদ্ধতি নামে চালানোর জন্য সংগ্রাম করছি testSaveAndDropফাইলে escalation/EscalationGroupTest.phpসঙ্গে phpunit। আমি নিম্নলিখিত সংমিশ্রণ চেষ্টা করেছি:

phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=escalation/EscalationGroupTest.php::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest.php::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=testSaveAndDrop

প্রতিটি ক্ষেত্রে ফাইলের সমস্ত পরীক্ষার মিথোড escalation/EscalationGroupTest.phpকার্যকর করা হয়। পরিবর্তে কেবল একটি পদ্ধতি কীভাবে নির্বাচন করবেন?

শ্রেণীর নাম EscalationGroupTestএবং সংস্করণটি phpunit3.2.8।


আপনার পরীক্ষার শ্রেণীর শ্রেণীর নাম কী?
sectus

উত্তর:


458

নিম্নলিখিত কমান্ডটি একটি পদ্ধতিতে পরীক্ষা চালায়:

phpunit --filter testSaveAndDrop EscalationGroupTest escalation/EscalationGroupTest.php

phpunit --filter methodName ClassName path/to/file.php

Phpunit এর নতুন সংস্করণগুলির জন্য, এটি ঠিক:

phpunit --filter methodName path/to/file.php

1
এসক্লেশনগ্রুপ টেস্ট রাইটিংয়ের দরকার কি? এর ব্যবহার কী?
মুজাফফাররা

2
ঠিক আছে আমি পেয়েছি এটি ক্লাসের নাম
মুজফফাররা 23:58

15
এটি টেস্টস্যাভঅ্যান্ডড্রপ * (উদাহরণ: টেস্টস্যাভঅ্যান্ডড্রপসামিংথিং) নামেও পরীক্ষা পদ্ধতি চালাবে। হুবহু টেস্টশেভ এন্ডড্রপ চালাতে - ফিল্টার '/ :: টেস্টস্যাভএন্ডড্রপ $ /' ব্যবহার করুন
ফরিদ মুভসুমভ

1
@ মুজাফফাররা আমার সন্দেহ আছে যে, "আমি পেয়েছি" হোয়াইটস্পেসের কারণে পিএইচপি তে কোনও বৈধ পরিচয়কারী নয়।
জন ম্যাকক্লুং

2
এটি এখন কাজ করে না। এটা ঠিক phpunit --filter methodName path/to/testing/file, না ClassName
সিজে ডেনিস

213

আমি এ্যানোটেশন হিসাবে পরীক্ষা চিহ্নিতকরণ পছন্দ

/**
 * @group failing
 * Tests the api edit form
 */
public function testEditAction()

তারপরে এটি চালানো

phpunit --group failing

কমান্ড লাইনে পুরো পাথটি নির্দিষ্ট করার দরকার নেই, তবে আপনাকে কোডটি বিশৃঙ্খলা না করে কমিট করার আগে এটিকে অপসারণ করতে হবে।

আপনি একটি একক পরীক্ষার জন্য বেশ কয়েকটি গ্রুপও নির্দিষ্ট করতে পারেন

/**
  * @group failing
  * @group bug2204 
  */
public function testSomethingElse()
{
}

4
আমি এই পদ্ধতিটি পছন্দ করি, টীকা দ্বারা একাধিক গোষ্ঠী নির্ধারণ করা কি সম্ভব? @group failing, Integration
ডিজি ব্রায়ান হাই

4
হ্যা অবশ্যই. তবে কমা আলাদা হয়নি। এটি চিত্রিত করতে উত্তর সম্পাদনা করা হয়েছে।
iamtankist

আমি এই পদ্ধতিটি আরও ভাল পছন্দ করি ... রেফারেন্সের জন্য পিপুনিট.এক্সএমএল << গোষ্ঠী> উপাদানগুলি পরীক্ষাগুলি ফিল্টার করতেও ব্যবহার করা যেতে পারে ... এরকম কিছু ব্যবহার করুন <phpunit>: <গোষ্ঠী << অন্তর্ভুক্ত> <গোষ্ঠী ব্যর্থ </ গ্রুপ > << অন্তর্ভুক্ত> </ গোষ্ঠী>
নিকোলাস গ্যালার

2
তবে প্রশ্নটি ছিল - একক পরীক্ষা চালানো। এছাড়াও - গ্রুপ ব্যর্থ হওয়াটি আপনি ব্যবহার করতে পারেন এটি সবচেয়ে খারাপ। কারণ কিছু পরীক্ষায় ব্যর্থ হওয়ার পরে আপনি গ্রুপটি না দিয়েই ব্যর্থ পরীক্ষা চালাতে ব্যর্থ হয়ে phpunit --group চালাতে পারেন। এটা বিভ্রান্তিকর.
রাফাł মিনিচ

সেরা উত্তর! এটির @dependsথেকে আর কোনও একক পরীক্ষা নেই যাতে আপনাকে সমস্ত আন্তঃসংযুক্ত পরীক্ষাগুলি চিহ্নিত করতে হয় এবং এভাবে @groupটীকাটি ব্যবহার করতে হয় ।
সেন্টুরিয়ান

116

এখানে আরও জেনেরিক উত্তর:

যদি আপনি নিশ্চিত হন যে পদ্ধতির নামটি অনন্য তবে আপনি কেবল পদ্ধতির নাম দ্বারা ফিল্টার করতে পারবেন (এটি আমার পক্ষে কাজ করে)

phpunit --filter {TestMethodName}

তবে পাশাপাশি ফাইলের পথ / রেফারেন্স নির্দিষ্ট করা নিরাপদ

phpunit --filter {TestMethodName} {FilePath}

উদাহরণ:

phpunit --filter testSaveAndDrop reference/to/escalation/EscalationGroupTest.php

দ্রুত দ্রষ্টব্য: আমি লক্ষ্য করেছি যে যদি আমার একটি ফাংশন নামকরণ করা হয় testSaveএবং testSaveAndDropকমান্ড ব্যবহার করে নামকরণ করা অন্য একটি ফাংশনও phpunit --filter testSaveচালিত হয় testSaveAndDropএবং অন্য কোনও ফাংশন যা শুরু হয় testSave*, এটি অদ্ভুত !!


4
এটি মোটেই অদ্ভুত নয়, এটি মূলত একটি সাবস্ট্রিং ম্যাচ। যদি আপনি এই আচরণটি চান, তবে স্ট্রিং টোকেনের /testSave$/
খ্রিস্টান

আপনি যদি কেবলমাত্র ফাইলের পথটি নির্দিষ্ট করতে চান তবে সেই ফাইলের সমস্ত পরীক্ষা চালানো যেতে পারে?
এখনও_ড্রিমিং_1

48

নিম্নলিখিত আদেশটি হুবহু testSaveAndDrop পরীক্ষা সম্পাদন করবে ।

phpunit --filter '/::testSaveAndDrop$/' escalation/EscalationGroupTest.php

4
আমার পক্ষে কাজ করেনি। ব্যবহার \bপরিবর্তে $পরিশেষে কৌতুক যা করেছে: --filter '/::testSaveAndDrop\b/'
জো

1
উভয় পদ্ধতির নাম শেষ হয়েছে '/::testSaveAndDrop\b/'এবং এটি '/::testSaveAndDrop$/'আমার জন্য phpunit --filter ClassName::methodName$এবং phpunit --filter ClassName::methodName\b(লিনাক্সে) এর জন্য কাজ করেছে
ভ্যালেন্টাইন শি

22

বিভিন্নভাবে ল্যারাভেলে phpunit পরীক্ষা চালানোর জন্য ..

vendor/bin/phpunit --filter methodName className pathTofile.php

vendor/bin/phpunit --filter 'namespace\\directoryName\\className::methodName'

একক শ্রেণির পরীক্ষার জন্য:

vendor/bin/phpunit --filter  tests/Feature/UserTest.php
vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest'
vendor/bin/phpunit --filter 'UserTest' 

একক পরীক্ষার জন্য:

 vendor/bin/phpunit --filter testExample 
 vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest::testExample'
 vendor/bin/phpunit --filter testExample UserTest tests/Feature/UserTest.php

নেমস্পেসের মধ্যে সমস্ত শ্রেণি থেকে রান পরীক্ষার জন্য:

vendor/bin/phpunit --filter 'Tests\\Feature'

আরও উপায়ে রান পরীক্ষা আরও দেখুন


21

সুতরাং, এই মত কিছু

phpunit --filter 'EscalationGroupTest::testSaveAndDrop' EscalationGroupTest escalation/EscalationGroupTest.php 

ছাড়া =এবং সাথে'

https://phpunit.de/manual/3.7/en/textui.html


না এটি কাজ করে না। শ্রেণিতে সমস্ত পরীক্ষা EscalationGroupTestপ্রক্রিয়াজাত করা হচ্ছে।
অ্যালেক্স

এখনও সব 9 টি পরীক্ষা চালানো হচ্ছে। phpunit সংস্করণ 3.2.8
অ্যালেক্স

2
--filterফাইলের নামের আগে জিনিসটি সরান এবং জিনিসগুলি ঠিক কাজ করা উচিত।
শ্লেইস

PHPUnit 4.8.10
Asaph

এটি আমাকে No tests executed!পিএইচপিউনিট 4.8.35 @ স্ক্লাইজে দেয় আপনি কমান্ডটি ঠিক কীভাবে পরিবর্তন করেছিলেন?
Andru

14
  • লারাভেল রুট ডিরেক্টরিতে আমি এটি ব্যবহার করে যাচ্ছি আপনার প্রকল্পের মূল ডিরেক্টরিতে এটি চালান।

vendor/bin/phpunit --filter 'Your method name'

কাস্টম পদ্ধতির নামের সাথে উদাহরণ।

 /** @test //Initilize this for custom method name, without test keyword
  *  
  * Test case For Dashboard When User Not logged In it will redirect To login page
  */
  public function only_logged_in_user_see_dashboard()
  {
    $response = $this->get('/dashboard')
                   ->assertRedirect('/login');
  }

পরীক্ষার কীওয়ার্ড সহ উদাহরণ

/**
* A basic test example.
*
* @return void
*/
 public function testBasicTest()
 {
  $this->assertTrue(true);
 }

1
আপনার কোড কী করছে সে সম্পর্কে আরও সুনির্দিষ্ট হন।
dpapadopoulos

1
নিশ্চিত যে আমি এখন একজন শিক্ষানবিস আসন্ন প্রতিক্রিয়াগুলির জন্য আরও নির্দিষ্ট কোডটি চেষ্টা করবো
কানেক্টিফিক_উজার

7

আপনি যদি নেটবিনে থাকেন তবে আপনি পরীক্ষা পদ্ধতিতে ডান ক্লিক করতে পারেন এবং "ফোকাসযুক্ত পরীক্ষা পদ্ধতি চালান" ক্লিক করতে পারেন।

ফোকাসযুক্ত পরীক্ষা পদ্ধতি মেনু চালান


7

আপনি এটি চেষ্টা করতে পারেন আমি একক পরীক্ষার কেস চালাতে সক্ষম

phpunit tests/{testfilename}

উদাহরণ:

phpunit tests/StackoverflowTest.php

আপনি যদি লারাভেল 5.5 তে একক পরীক্ষার মামলা চালাতে চান তবে চেষ্টা করুন

vendor/bin/phpunit tests/Feature/{testfilename} 

vendor/bin/phpunit tests/Unit/{testfilename} 

উদাহরণ:

vendor/bin/phpunit tests/Feature/ContactpageTest.php 

vendor/bin/phpunit tests/Unit/ContactpageTest.php

প্রশ্নটি ছিল কীভাবে একক পরীক্ষা পদ্ধতি চালাবেন (শ্রেণি নয়)
আলেক্সেই আকিরেইকিন

4

আপনার পরীক্ষাগুলি চালানোর কারণটি হ'ল --filterফাইলের নামের পরে আপনার পতাকা রয়েছে। পিএইচপিউনিট বিকল্পগুলি মোটেও পড়ছে না এবং তাই সমস্ত পরীক্ষার কেস চালাচ্ছে।

সহায়তা স্ক্রীন থেকে:

 Usage: phpunit [options] UnitTest [UnitTest.php]
        phpunit [options] <directory>

সুতরাং --filter@ অ্যালেক্স এবং @ ফ্রিড মাভসামোভ উত্তরে উল্লিখিত হিসাবে আপনি যে ফাইল ফাইলটি চান তা চাওয়ার আগে যুক্তিটি সরান। এবং আপনি কেবল যা চালাতে চান তা পরীক্ষা করা উচিত।


আমার মনে হয় না এটি আসল প্রশ্নের সমাধান করে ... আমার অনেক ইউনিট
টেস্টযুক্ত

@ জেফূ ওপি-র কমান্ডগুলির মধ্যে একটি সমস্যা হ'ল --filterবিকল্পটি ফাইল নামের পরে। অন্য দুটি উত্তরের সঠিক উত্তর ছিল তবে ফিল্টারটি কেন প্রয়োগ করা হচ্ছে তা উল্লেখ করেনি।
শ্লেইস

2

আপনি যদি কোনও এক্সএমএল কনফিগারেশন ফাইল ব্যবহার করেন তবে আপনি phpunitট্যাগের মধ্যে নিম্নলিখিতটি যুক্ত করতে পারেন :

<groups>
  <include>
    <group>nameToInclude</group>
  </include>
  <exclude>
    <group>nameToExclude</group>
  </exclude>
</groups>

Https://phpunit.de/manual/current/en/appendixes.configration.html দেখুন


1

যদিও আমি পার্টিতে দেরি করছি। তবে ব্যক্তিগত হিসাবে আমি পুরো লাইনটি লিখতে পছন্দ করি না।

পরিবর্তে, আমি নিম্নোলিখিত শর্টকাটগুলি ব্যবহার .bash_profile ফাইল নিশ্চিত করুন থেকে উৎস .bash_profile ফাইলটি অন্য কোনো নতুন ওরফে যোগ করলে তা কাজ করবে না পরে।

alias pa="php artisan"
alias pu="vendor/bin/phpunit" 
alias puf="vendor/bin/phpunit --filter"

ব্যবহার:

puf function_name

puf filename

আপনি যদি ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করেন তবে আপনি আপনার পরীক্ষাগুলি বাতাস করতে নীচের প্যাকেজটি ব্যবহার করতে পারেন।

Package Name: Better PHPUnit
Link: https://marketplace.visualstudio.com/items?itemName=calebporzio.better-phpunit

তারপরে আপনি সেটিংসে কী-বাইন্ডিং সেট করতে পারেন। আমি আমার ম্যাকটিতে কমান্ড + টি বাইন্ডিং ব্যবহার করি।

এখন একবার আপনি আপনার কার্সারটি যে কোনও ফাংশনে রাখুন এবং তারপরে কী বাঁধাই ব্যবহার করুন এটি স্বয়ংক্রিয়ভাবে সেই একক পরীক্ষা চালাবে।

আপনার দরকার হলে পুরো ক্লাস চালাবেন তবে উপরে কার্সারটি রাখুন এবং তারপরে কী বাইন্ডিংটি ব্যবহার করুন।

আপনার যদি অন্য কোনও জিনিস থাকে তবে সর্বদা টার্মিনালের সাথে টুইট করুন

শুভ কোডিং!


0

একটি একক পরীক্ষা পদ্ধতি চালাতে আপনাকে অবশ্যই ফিল্টার ব্যবহার করতে হবে php phpunit --filter "/::testMethod( .*)?$/" ClassTest ClassTest.php

উপরের ফিল্টারটি টেস্টমেথোদ একাই চলবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.