ইউনিট পরীক্ষাগুলি প্রতিরোধ করুন তবে মাভেনে সংহতকরণ পরীক্ষার অনুমতি দিন


157

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

পোমের বিভিন্ন প্রোফাইল বা কিছু যুক্ত করা আমার পক্ষে ভাল সমাধান নয়, কারণ এটি একটি মাল্টিমিডুল বিল্ড এবং আমি প্রতিটি মডিউলের পম সম্পাদনা করতে চাই না।

এখানে রয়েছে skip.testsএবং যা সমস্ত পরীক্ষা বন্ধ করে দেয় maven.test.skipএবং skipTestsযা কেবলমাত্র ব্যর্থ সেফ প্লাগইন বন্ধ করে দেয়।skipITs

সুতরাং, মাভেনের মতো কমান্ড-লাইনের পতাকাটি কি skipITsতবে এর পরিবর্তে "একমাত্র আইটি" এর কার্যকারিতা রয়েছে?


আপনি চেষ্টা করেছেন maven.test.skipনাকি skipTests?
থমাস

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

9
@khmarbaise ইউনিট পরীক্ষা প্রচুর। তারা দৌড়াতে কয়েক মিনিট সময় নেয় এবং আমাদের এই পরিস্থিতিতে চালানোর দরকার নেই। বিশেষত, আমরা আর্টিফ্যাক্ট (অবশ্যই) তৈরির আগে ইউনিট পরীক্ষা চালাই, তবে আমরা একাধিক পরিবেশে আইটি চালাতে চাই। এই মুহুর্তে ইউনিট পরীক্ষাগুলি পুনরায় চালিত করার কোনও বিন্দু নেই।
ম্যাথু গিলিয়ার্ড

2
হাই @khmarbaise, আমার সেট আপগুলিতে skipTestsকেবল নিশ্চিত ফায়ার টেস্টগুলি এড়িয়ে যায়, ফেলেনসেফ পরীক্ষা নয়! সম্ভবত এটি একটি নতুন বৈশিষ্ট্য?
ডানিদেমি

2
অবগতির জন্য: skipTests এখন 3.0.0-M3 (Failsafe প্লাগইন মধ্যে অবচিত surefire-1611 )
Guillaume, Husta

উত্তর:


170

আমি নিশ্চিত করেছি যে কেবলমাত্র ফায়ারফায়ার পরীক্ষাগুলি এড়িয়ে যাওয়ার সহজ উপায়টি হ'ল শিফারফায়ার কনফিগার করা ( তবে ফেইলসেফ নয় ) নীচে:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.14</version>
    <configuration>
        <!-- skips surefire tests without skipping failsafe tests.
                 Property value seems to magically default to false -->
        <skipTests>${skip.surefire.tests}</skipTests>
    </configuration>
</plugin>

এটি আপনাকে চালানোর অনুমতি দেয় mvn verify -Dskip.surefire.testsএবং কেবলমাত্র ফায়ার সেফ নয়, পরীক্ষা চালিয়ে যায়; এটি প্রাক-সংহতকরণ এবং উত্তর-ইন্টিগ্রেশন সহ অন্যান্য সমস্ত প্রয়োজনীয় পর্যায়গুলিও পরিচালনা করবে এবং আপনার ইন্টিগ্রেশন পরীক্ষায় ব্যর্থ হলে verifyপ্রকৃতপক্ষে আপনার মেভেন বিল্ডটি ব্যর্থ করার জন্য প্রয়োজনীয় লক্ষ্যটিও চালিত করবে ।

নোট করুন যে পরীক্ষাগুলি -DskipTests=trueএড়াতে হবে তা নির্দিষ্ট করতে ব্যবহৃত সম্পত্তিটিকে এটি পুনরায় সংজ্ঞায়িত করে, সুতরাং আপনি যদি ক্যানোনিকাল সরবরাহ করেন তবে নিশ্চিত ফায়ারফায়ার এটিকে অগ্রাহ্য করবে তবে ব্যর্থ সাফ এটি সম্মান করবে, বিশেষত যদি আপনার কাছে ইতিমধ্যে বিল্ড / ব্যবহারকারীরা ইতিমধ্যে চিহ্নিত করে নির্দিষ্ট করে থাকে তবে এটি অপ্রত্যাশিত হতে পারে। একটি সাধারণ কাজটি মনে হয় আপনার পোমের বিভাগে skip.surefire.testsমানটি ডিফল্ট হবে :skipTests<properties>

<properties>
    <skip.surefire.tests>${skipTests}</skip.surefire.tests>
</properties>

আপনার যদি প্রয়োজন হয় তবে আপনি skip.failsafe.testsফেইলসেফের জন্য কল করা একটি অ্যানালাগাস প্যারামিটার সরবরাহ করতে পারেন , তবে আমি এটি প্রয়োজনীয় খুঁজে পাইনি - কারণ ইউনিট পরীক্ষাগুলি সাধারণত পূর্ববর্তী পর্যায়ে পরিচালিত হয়, এবং যদি আমি ইউনিট পরীক্ষা চালাতে চাইছি তবে ইন্টিগ্রেশন টেস্টগুলি না, আমি চালাতাম testপরিবর্তে ফেজ verifyফেজ। আপনার অভিজ্ঞতা বিভিন্ন হতে পারে!

এই skip.(surefire|failsafe).testsবৈশিষ্ট্যগুলি সম্ভবত নিশ্চিত ফায়ারফায়ার / ফেইলসেফ কোডে একীভূত করা উচিত, তবে আমি নিশ্চিত নই যে এটি "ক্ষুদ্রতর পার্থক্য বাদে তারা ঠিক একই প্লাগইন" নীতিকে লঙ্ঘন করবে।


4
এই সমাধানটি ব্যবহার করে আমি আমার কাঠামো সেটআপ করতে সক্ষম হয়েছি তাই-ডিস্কিপ ইউনাইটটেষ্টস নিশ্চিতফায়ার প্লাগইনটির উপরে চলে যায়, -স্কিপআইএনটিগ্রেশন টেস্টস ব্যর্থসেইফ প্লাগইন থেকে বাদ যায় এবং ডিস্কিপটেষ্ট উভয়কে ছাড়িয়ে যায়। ঠিক কী দরকার ছিল!
অ্যালেক্স জানসেন

2
আমার আইডিই সম্পর্কে অভিযোগ হয় "করতে পারেন না সমাধানে প্রতীক 'skipTests'" সমাধান যোগ করার জন্য একটি লাইন ছিল <skipTests>false</skipTests>এখনও -DskipTests বা -Dskip.surefire.tests কোনো সমন্বয় সঙ্গে কাজ করে যেমন কমান্ড লাইন args ঊর্ধ্বলিপি বৈশিষ্ট্য বলে মনে হচ্ছে stackoverflow.com/questions/13708738 /… আপনি এটি আপনার সমাধানটিতে যোগ করতে চাইতে পারেন
গ্লোবাল ওয়ার্মিং

<skipTests>${skip.surefire.tests}</skipTests>maven-surefire-pluginসংস্করণ সঙ্গে কাজ করছে না 3.0.0-M3। সমস্ত নিশ্চিত ফায়ার টেস্ট এখনও চলছে। অন্য কেউ এটি পেয়েছে? শন প্যাট্রিক ফ্লয়েডের নীচের সমাধানটি যদিও কাজ করছে।
জন মেয়ার

120

একটি কর্মসূচী কল করা হবে:

mvn clean test-compile failsafe:integration-test

স্বীকার করা, এটি কুৎসিত তবে এটি আপনার সমস্যার সমাধান করতে পারে।


বা (অন্য একটি হ্যাক):

mvn clean integration-test -Dtest=SomePatternThatDoesntMatchAnything -DfailIfNoTests=false

রেফারেন্স:


1
দ্বিতীয় পরামর্শটি আমার পক্ষে কাজ করেছিল। প্রাক-ইন্টিগ্রেশন-পরীক্ষা সফলভাবে ডাকা হয়েছিল
লরেন্স টিয়ার্নি

7
এই একটি ভাল ধারণা? আপনার ইন্টিগ্রেশন পরীক্ষাগুলি ব্যর্থ হওয়া সত্ত্বেও কি এই ফলাফলটি আপনার বিল্ড সফল হবে না? অর্থাৎ failsafe সমগ্র সারাংশ এর যদি না এছাড়াও 'যাচাই' লক্ষ্য চালানো । উদ্ধৃতি: "ইন্টিগ্রেশন-পরীক্ষার পর্যায়ে ব্যর্থতা ফেলেন্সেফ প্লাগইন"। ইন্টিগ্রেশন পরীক্ষাগুলি সফল হয়েছে কি না তা আসলে আপনাকে জানাতে আপনার যাচাইকরণের লক্ষ্যটি চালানো দরকার!
বেকার

2
@ ব্যাকারটি ঠিক আছে, তবে ২ য় সমাধানের verifyপরিবর্তে ব্যবহার করুন integration-test
ম্যাথু গিলিয়ার্ড

1
আরও ভাল সমাধানের জন্য আপনার অবশ্যই @ ব্যাকার উত্তরটি দেখতে হবে।
এফবিবি

12
যদি আপনি failsafe:verifyপ্রথম হ্যাক ( mvn clean test-compile failsafe:integration-test failsafe:verify) এর শেষে যোগ করেন তবে ইন্টিগ্রেশন পরীক্ষার কোনও একটি ব্যর্থ হলে এটি বিল্ডটি ব্যর্থ হবে।
শ্যাডো ম্যান

73

আমি আন্তোনিও গনকাল্ভস ব্লগ থেকে কোডটি ব্যবহার করছি , যা নিখুঁত কাজ করে।

আপনি নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন:

-DskipUTs=true নিশ্চিত ফায়ার টেস্টগুলি এড়িয়ে যাওয়ার জন্য।

-DskipITs=true ব্যর্থ সাফল্য পরীক্ষা এড়ানোর জন্য।

-DskipTests=true সমস্ত পরীক্ষা এড়ানোর জন্য।

pom.xmlনিম্নরূপ:

<properties>
    <skipTests>false</skipTests>
    <skipITs>${skipTests}</skipITs>
    <skipUTs>${skipTests}</skipUTs>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <skipTests>${skipUTs}</skipTests>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.19.1</version>
            <executions>
                <execution>
                    <id>run-integration-tests</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <skipTests>${skipTests}</skipTests>
                <skipITs>${skipITs}</skipITs>
            </configuration>
        </plugin>
    </plugins>
</build>

2
ধন্যবাদ, দুর্দান্ত পদ্ধতির! নিশ্চিতফায়ারের ডিফল্ট সম্পাদন (ডিফল্ট-পরীক্ষা) ওভাররাইড করার জন্য এটি দরকারী: দেখুন স্ট্যাকওভারফ্লো
পিএলএস

1
এ কারণেই আপনাকে মাঝে মাঝে স্ক্রল ডাউন করতে হবে এবং প্রয়োজনীয় সমস্ত তথ্য সহ একটি চমৎকার কার্যক্ষম সমাধানের সন্ধান করতে হবে। ভাগ করে নেওয়ার জন্য ধন্যবাদ
অতুল চৌধুরী চৌধুরী

সত্যিই একটি দুর্দান্ত সমাধান। তবে, ব্যর্থ সাফ কনফিগারেশনটি skipITsডিফল্ট হিসাবে রিডানড্যান্ট ।
টিমোমেনেন

এই কনফিগারেশনে SkipITs একটি কাস্টম বিকল্প। আপনি ঠিক ডিফল্ট বাস্তবায়নের ক্ষেত্রে, তবে এটি ওপিএস প্রশ্ন ছিল না।
মার্টিজন বার্গার

কুডোস, আপনি একজন খাঁটি গুরু! এটি ম্যাভেন সুপারপোমে থাকা উচিত।
আদম

22

আশাকরি এটা সাহায্য করবে!

কেবলমাত্র ফেলসেফের সাথে পরীক্ষা চালানোর চেষ্টা করুন (ইন্টিগ্রেশন-টেস্টের প্লাগইন - এটি আপনাকে পূর্বনির্ধারিতভাবে এই জাতীয় নামকরণের সাথে কেবলমাত্র ইন্টিগ্রেশন টেস্টগুলি চালানোর অনুমতি দেবে: * / আইটি। জাভা, ** / আইটি.জাভা, * /*ITCase.java ;, তবে আপনি এটি পম ফাইল থেকে সহজেই পরিবর্তন করতে পারবেন)

mvn failsafe:integration-test

এবং আপনি যখন কেবল শিওরফায়ার (ইউনিট-পরীক্ষার জন্য প্লাগইন) ব্যবহার করতে চান

mvn surefire:test

বা এক সাথে একবারে একটি পরীক্ষা:

mvn -Dtest=MyUnitlTest

9

আমি এটি পছন্দ করি যাতে প্রতিটি পর্বগুলি সাধারণত সম্পাদিত হয়:

 mvn -Dtest=foo -DfailIfNoTests=false verify

1
এটি সহজতম (এবং সত্যই সবচেয়ে উজ্জ্বল) সমাধান!
তিতুলাম

ওপি যেমন জিজ্ঞাসা করেছে তেমন পোমটিতে কিছু যুক্ত করার প্রয়োজন নেই এবং নির্দেশিত হিসাবে সমস্ত পর্যায়গুলি চালায়। দুর্দান্ত উত্তর
jnichols959

1

@ গানেমেদি এবং @ গুইলিউম হুস্টার মন্তব্যগুলিতে প্রসারিত করতে:

এফওয়াইআই: স্কিপ টেস্টগুলি এখন ফেলসেইফ প্লাগইন 3.0.0-এম 3 ( স্যুরফায়ার -1611 ) এ অবচয় করা হয়েছে

সুতরাং ইউনিট পরীক্ষা এড়ানোর জন্য, তবে একীকরণের পরীক্ষা নয়, আপনি যদি ফেল্সেফ প্লাগইনের সর্বশেষতম সংস্করণটি ব্যবহার করেন তবে আপনি এটি করতে পারেন:

mvn verify -DskipTests

(দয়া করে উল্লিখিত মন্তব্যগুলিকে একটি উত্সাহ দিন যদি এটি আপনাকে সহায়তা করে)


-3

পৃথক প্রোফাইলে আপনার একীকরণ বা ইউনিট পরীক্ষা চালানোর চেষ্টা করুন। তারপরে আপনি কেবল প্রোফাইল সক্ষম / অক্ষম করতে পারবেন।


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