গ্রেডলে কীভাবে কেবল একটি স্থানীয় পরীক্ষার ক্লাস চালাবেন


429

আমি গ্র্যাডলে নতুন আমি গ্রেডল 1.10 এবং উবুন্টু 13 ব্যবহার করি।

আমি জানতে চাই যে এসবিটি-তে 'টেস্টনলি'-এর অনুরূপ কেবলমাত্র একটি স্থানীয় পরীক্ষা ক্লাস চালানোর জন্য কোনও আদেশ রয়েছে কিনা ?


উত্তরগুলি দেওয়া হয়েছে, এটি স্পষ্ট হওয়া উচিত এটি স্থানীয় পরীক্ষার বিষয়ে, না কোনও চালিত পরীক্ষা। অ্যান্ড্রয়েড / গ্রেডল এই স্থানীয় পরীক্ষাগুলি "ইউনিট" পরীক্ষাগুলি কল করে জিনিসগুলিকে বিভ্রান্ত করে তোলে।
tir38

উত্তর:


560

একক পরীক্ষার ক্লাস চালানোর জন্য এয়ারবর্ণের উত্তর ভাল।

এখানে পাওয়া কিছু কমান্ড লাইন বিকল্প ব্যবহার করে আপনি কেবল এই জাতীয় কিছু করতে পারেন।

gradle test --tests org.gradle.SomeTest.someSpecificFeature
gradle test --tests *SomeTest.someSpecificFeature
gradle test --tests *SomeSpecificTest
gradle test --tests all.in.specific.package*
gradle test --tests *IntegTest
gradle test --tests *IntegTest*ui*
gradle test --tests *IntegTest.singleMethod
gradle someTestTask --tests *UiTest someOtherTestTask --tests *WebTest*ui

গ্রেডেলের 1.10 সংস্করণ থেকে এটি পরীক্ষার ফিল্টার ব্যবহার করে পরীক্ষার নির্বাচনকে সমর্থন করে । উদাহরণ স্বরূপ,

apply plugin: 'java'

test {
  filter {
    //specific test method
      includeTestsMatching "org.gradle.SomeTest.someSpecificFeature"

     //specific test method, use wildcard for packages
     includeTestsMatching "*SomeTest.someSpecificFeature"

     //specific test class
     includeTestsMatching "org.gradle.SomeTest"

     //specific test class, wildcard for packages
     includeTestsMatching "*.SomeTest"

     //all classes in package, recursively
     includeTestsMatching "com.gradle.tooling.*"

     //all integration tests, by naming convention
      includeTestsMatching "*IntegTest"

     //only ui tests from integration tests, by some naming convention
     includeTestsMatching "*IntegTest*ui"
   }
}

বহু-স্বাদযুক্ত পরিবেশের জন্য (অ্যান্ড্রয়েডের জন্য একটি সাধারণ ব্যবহারের ক্ষেত্রে), এই উত্তরটি পরীক্ষা করুন , কারণ --testsযুক্তিটি অসমর্থিত হবে এবং আপনি একটি ত্রুটি পাবেন।


ফিল্টার পদ্ধতির কিছু সুবিধাজনক পরীক্ষা নির্বাচনের জন্য টাস্ক নিয়মের সাথেও সংযুক্ত করা যেতে পারে
ম্যাট হুইপল

বৃহত্তর পরীক্ষার স্যুটগুলির জন্য, এমনকি যদি --testsক্লাসের মধ্যে একটি একক পরীক্ষার পদ্ধতি কল করতে ব্যবহার করা হয়, তবে আমরা সমস্ত ক্লাসে পুনরাবৃত্তি দেখতে পাই এমনকি চালিত না হওয়া সমস্তগুলি, যা খুব ধীর। জানি না যে slিলে .ালাটি আমাদের vর্ষার কারণে হয়েছে বা এটি অন্যকে প্রভাবিত করে। আরও খুঁজে পেতে আপডেট করতে পারেন।
17'19

185

আপনি gradle -Dtest.single=ClassUnderTestTest testযদি একক শ্রেণি পরীক্ষা করতে চান বা রিজ এক্সপ ব্যবহার করতে চান তবে আপনি এই লিঙ্ক বিভাগ 23.12 এর অধীনেgradle -Dtest.single=ClassName*Test test পরীক্ষার জন্য ফিল্টারিং ক্লাসের আরও উদাহরণ পেতে পারেন do পরীক্ষা করুন।


30
সাম্প্রতিক সংস্করণগুলি (১.১০ বা তার থেকে শুরু করে) --testsকমান্ড লাইন বিকল্পকে সমর্থন করে , যা প্রতিস্থাপনে সেট করা আছে -DtestTaskName.single
পিটার নিদারউইজার

58
সঙ্গে --testবিকল্প আপনি আপনার পরীক্ষা বর্গ মধ্যে একটি একক পদ্ধতি পরীক্ষার সীমিত করতে পারেন। উদাহরণস্বরূপ: আপনার ক্লাসের মধ্যে gradle test --tests *MyTest.someMethod কেবল একটি একক পরীক্ষা চালাবে । যেহেতু আমি একটি পরীক্ষার কেসটি তৈরি করছি, আমি সাধারণত একবারে একটি পদ্ধতি চালিত করি যাতে আমার ডিবাগ করা দরকার হয় এমন আউটপুটটিতে ফোকাস করা আরও সহজ হয়, তারপরে পুরো টেস্ট কেসটি শেষে শেষ করে চালানো হয়। someMethodMyTest
জেফ ফ্রেঞ্চ

10
এছাড়াও লক্ষণীয় যে আপনি যদি একটি বহু-মডিউল প্রকল্পে একটি পরীক্ষা চালাতে চান, তবে আদেশটি gradle -D:submodule:test.single=ClassUnderTestTest :submodule:test। দেখুন gradle.org এই আলোচনা
Bulat

2
আপনি একটি --no-rebuildবিকল্পও ব্যবহার করতে চাইতে পারেন , উদাহরণস্বরূপ gradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:testপুনর্নির্মাণের উপর নির্ভরতা রোধ করতে এবং পরিবর্তে সেই একক পরীক্ষাটি দ্রুত কার্যকর করতে।
ফ্যালকনপল

2
এই বিকল্পটি গ্রেডল 5-এ নষ্ট হয়েছে যদিও
আইয়াল

108

আপনার যদি একটি মাল্টি-মডিউল প্রকল্প রয়েছে:

আমাদের বলুন আপনার মডিউল কাঠামো

root-module
 -> a-module
 -> b-module

এবং আপনি যে পরীক্ষাটি (টেস্টটোরান) চালাতে চান তা পুরো পথ সহ বি-মডিউলটিতে রয়েছে: com.xyz.b.module.TestClass.testToRun

এখানে যেমন আপনি খ-মডিউলটিতে পরীক্ষা চালাতে আগ্রহী তাই আপনার খ-মডিউলটির জন্য উপলব্ধ কার্যগুলি দেখা উচিত।

./gradlew :b-module:tasks

উপরের কমান্ডটি বি-মডিউলে সমস্ত কাজের বিবরণ দিয়ে তালিকাভুক্ত করবে। আর আদর্শ ক্ষেত্রে, আপনি একটি টাস্ক নামে থাকবে পরীক্ষা যে মডিউলে ইউনিট পরীক্ষা চালানোর জন্য।

./gradlew :b-module:test

এখন, আপনি বি-মডিউলটিতে সমস্ত পরীক্ষা চালানোর পর্যায়ে পৌঁছেছেন, শেষ পর্যন্ত আপনি পরীক্ষা চালানোর জন্য উপরের টাস্কটিতে একটি প্যারামিটারটি পাস করতে পারেন যা নির্দিষ্ট পথের সাথে মেলে

./gradlew :b-module:test --tests "com.xyz.b.module.TestClass.testToRun"

এখন, এর পরিবর্তে যদি আপনি চালান

./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"

এটি দুটি এবং মডিউল উভয়ের জন্য পরীক্ষার কাজ চালাবে, যার ফলে ব্যর্থতা হতে পারে কারণ কোনও-মডিউলটিতে উপরের প্যাটার্নের সাথে মিল নেই matching


1
বা সহজভাবে./gradlew :b-module:test --tests testToRun
আহমেদ আশুর

32

অনেক কিছু বের করার পরে, নিম্নলিখিতগুলি আমার পক্ষে কাজ করেছে:

gradle test --tests "a.b.c.MyTestFile.mySingleTest"


10
এই আদেশটি আমার পক্ষে কাজ করছে না। > ত্রুটি: অজানা কমান্ড-লাইন বিকল্প '--tests'
তারকিক

31

দয়া করে মনে রাখবেন যে --testsআপনার যদি আলাদা বিল্ড থাকে types/flavors(ব্যর্থ হয় Unknown command-line option '--tests') তবে বিকল্পটি কাজ করতে পারে না । এই ক্ষেত্রে, নির্দিষ্ট পরীক্ষার কাজটি নির্দিষ্ট করা প্রয়োজন (উদাহরণস্বরূপ ন্যায়বিচারের testProdReleaseUnitTestপরিবর্তে test)


6
এই সঠিক পরিস্থিতিতে দৌড়ান ধন্যবাদ!
জেপিএম

আপনি একটি সম্পূর্ণ উদাহরণ ব্যাখ্যা করতে পারেন? আমি 3 টি টেস্ট চালানোর চেষ্টা করছি যা একটি ওয়াইল্ডকার্ডের সাথে মেলে ./gradlew test --tests *testMyCollectionTake*এবং আমি বলতে পারি না কীভাবে আমি testওয়াইল্ডকার্ড পরীক্ষার নামটি দিয়ে প্রতিস্থাপন করব
ড্যানিয়েলকুড্রা

4

gradlewকমান্ড লাইন বিকল্পটি ব্যবহার করে একটি একক পরীক্ষা ক্লাস চালানোর জন্য নীচে কমান্ডটি দেওয়া হয়েছে :

gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass

com.example.TestClassভেরিয়েন্ট সহ ক্লাস চালাতে উদাহরণের নীচে Variant_1:

gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass 

2

আপনার শেষের দিকে অ্যাসিটারিকস (*) যুক্ত করার চেষ্টা করা উচিত।

গ্রেড পরীক্ষা --tests "com.abc *"


2

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

./gradlew app:testDebug --tests=com.example.MyTest

0

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

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