এসবিটি-তে স্কাল টেস্ট: ট্যাগ ছাড়াই একক পরীক্ষা চালানোর কোনও উপায় আছে কি?


150

আমি জানি যে একটি একক পরীক্ষা রান করে, এসবিটি-তে চালানো যেতে পারে,

testOnly *class -- -n Tag

ট্যাগ ছাড়াই একক পরীক্ষা চালানোর জন্য কি এসবিটি / স্কেলেস্টেস্ট বলার কোনও উপায় আছে? উদাহরণ স্বরূপ:

testOnly *class -- -X 2

এর অর্থ হবে "ক্লাসে দ্বিতীয় পরীক্ষা চালানো Whatever যা কিছু হোক"। আমাদের একগুচ্ছ পরীক্ষা আছে এবং কেউ তাদের ট্যাগ করতে বিরক্ত করে না, তাই কি কোনও একক পরীক্ষা চালানোর কোনও উপায় আছে যার ট্যাগ না থাকলে?


1
আপনার বিষয় বলে "স্কেলেস্টেস্ট-এসবিটি"। যখন এসবিটি হাইফেনেটেড হয় তখন লোকেরা সাধারণত একটি প্লাগইন চিন্তা করে। তবে, কেবল স্পষ্ট করে বলার জন্য, আপনি sbt 0.12 এর মতো আধুনিক সংস্করণ থেকে স্কেলাটেষ্ট ব্যবহার করার কথা বলছেন , 4 বছর আগে লিখিত এসবিটি 0.5.2-পি 3 এর জন্য একটি প্লাগইন জোশকফ / স্কেলিয়েস্ট-এসবিটি নয় । সঠিক?
ইউজিন ইয়োকোটা

সঠিক। এটি একটি পুরানো প্রশ্ন এবং আমি তখন থেকেই বুঝতে পেরেছি যে না, এটি সম্ভব নয় (যতদূর আমি জানি)। বাস্তবে কেউ কোনও উপায় বের করতে পেরে আমি এটিকে বন্ধ করি নি, তবে এর আর উত্তর দেওয়ার দরকার নেই আমার।
নচট

এই বিষয়ে একটি থ্রেড রয়েছে (বিল ভেনার এবং মার্ক হারাহ উভয়ের অংশীদারিত্বের সাথে) google.google.com/forum/#!topic/scalatest-users/1oRMkudFAXM এ , তবে এখনও কোনও সমাধান হয়নি
শেঠ টিস্যু

1
একটি একক পরীক্ষা এসবিটি # 911 ( github.com/sbt/sbt/issues/911 ) চালানোর ক্ষেত্রে সাধারণ সমর্থনের জন্য একটি মামলাও রয়েছে
ইউজিন ইয়োকোটা

14
মনে রাখবেন যে আপনি যদি কমান্ড লাইনটি থেকে চালাচ্ছেন তবে আপনাকে উদ্ধৃতিতে সমস্ত কিছু আবদ্ধ করতে হবেsbt , যেমনsbt "test-only *SingleTestSuite"
ক্রিস মার্টিন

উত্তর:


202

এটি এখন ইন্টারেক্টিভ মোডের মধ্যে (স্কেলটেষ্ট ২.১.৩ থেকে) সমর্থিত:

testOnly *MySuite -- -z foo

কেবলমাত্র সেই পরীক্ষাগুলি চালাতে যার নামটিতে "foo" স্ট্রিং থাকে ring

সাবস্ট্রিংয়ের চেয়ে সঠিক ম্যাচের জন্য -tপরিবর্তে ব্যবহার করুন -z


@ শেঠটিউজ আপনি কি এমন কোনও কাজের উদাহরণ পোস্ট করতে সক্ষম হবেন যা -tসঠিক মিলের জন্য ব্যবহার করে ? আমি এটি কাজ করতে অক্ষম।
rmin

@rmin gist.github.com/SethTisue/f75cd8b72128ba0a0a81 । (যদি এটি আপনাকে আপনার সমস্যার সমাধান করতে সহায়তা করে তবে আমার উত্তর কীভাবে আপডেট করা উচিত তা আমাকে জানান))
শেঠ টিস্যু

10
কেবল স্পষ্ট করে বলার জন্য, আপনি যদি কমান্ড লাইন থেকে এটি চালনা করেন তবে এটি একক যুক্তি হিসাবে হওয়া উচিত: sbt "কেবলমাত্র টেস্ট * মাইসুইট
-জ ফু

2
যদি কেউ নির্দিষ্ট ইন্টিগ্রেশন পরীক্ষা চালাতে চায় (তবে ধারণা করা হয় এর অধীনে স্থাপন করা হয়েছে src/it), তাদের এগুলির itজন্য পূর্বে চাপ দেওয়া দরকার testOnly। উদাহরণস্বরূপ, কমান্ড লাইন করুন: sbt "it:testOnly *MyIntegrationTestSuite"
laylaylom

2
আমি একাধিক সাবস্ট্রিংগুলিতে কীভাবে ফিল্টার করতে পারি? পরীক্ষাগুলি একটি শ্রেণিবিন্যাস (ওয়ার্ডস্পেক) এ গোষ্ঠীভুক্ত হতে পারে এবং নামের অংশগুলি পৃথক করে whenএবং should পরীক্ষার মধ্যে পুনরাবৃত্তি করতে পারে। একটি নির্দিষ্ট পরীক্ষা বাছাই করার জন্য আমাকে বলতে হবে "নামটিতে এটি রয়েছে এবং এটি"।
ভিটুইল

98

আমি অন্যান্য উত্তরগুলি সহ একটি দৃ concrete় উদাহরণ যুক্ত করতে চেয়েছিলাম

আপনি যে শ্রেণীর পরীক্ষা করতে চান তার নাম উল্লেখ করতে হবে, সুতরাং আপনার যদি নিম্নলিখিত প্রকল্প হয় (এটি একটি প্লে প্রকল্প):

প্রকল্প খেলুন

আপনি Loginএসবিটি কনসোল থেকে নিম্নলিখিত কমান্ডটি চালিয়ে কেবল পরীক্ষা করতে পারেন :

test:testOnly *LoginServiceSpec

আপনি যদি এসবিটি কনসোলের বাইরে থেকে কমান্ডটি চালাচ্ছেন তবে আপনি নিম্নলিখিতটি করবেন:

sbt "test:testOnly *LoginServiceSpec"

27
আপভোট করুন কারণ আপাতদৃষ্টিতে ডাবল উদ্ধৃতিগুলি প্রয়োজনীয়:sbt "test:testOnly *LoginServiceSpec"
জেসন হুইলার

5
এখানে আমার জন্য সবচেয়ে দরকারী উত্তর। 👍 তবে কমান্ডগুলি কিছুটা সহজ করা যায়; এসবিটি কনসোলে testOnly *LoginServiceSpecsbt "testOnly *LoginServiceSpec"
:,

49

আমি একটি পরীক্ষার ক্লাসের মধ্যে একটি একক অনাবৃত পরীক্ষা চালানোর কোন উপায় দেখছি না তবে আমি আমার ওয়ার্কফ্লো সরবরাহ করছি যেহেতু এই প্রশ্নের মধ্যে যে কেউ আসে তার পক্ষে এটি কার্যকর বলে মনে হয়।

একটি এসবিটি অধিবেশন থেকে:

test:testOnly *YourTestClass

(তারকাচিহ্নটি একটি ওয়াইল্ডকার্ড, আপনি পুরো পথটি নির্দিষ্ট করতে পারেন com.example.specs.YourTestClass))

সেই পরীক্ষার শ্রেণীর মধ্যে সমস্ত পরীক্ষা কার্যকর করা হবে। সম্ভবত আপনি ব্যর্থ পরীক্ষাগুলিতে সবচেয়ে বেশি উদ্বিগ্ন, তাই কোনও ব্যর্থ বাস্তবায়ন সংশোধন করুন এবং তারপরে চালান:

test:testQuick

... যা কেবলমাত্র পরীক্ষাগুলি কার্যকর করবে যা ব্যর্থ হয়েছিল। (সর্বাধিক মৃত্যুদন্ড কার্যকর হওয়া test:testOnlyকমান্ডের পুনরাবৃত্তি একই test:testQuickক্ষেত্রে একই হবে তবে আপনি যদি পরীক্ষার পদ্ধতিগুলি যথাযথ পরীক্ষার শ্রেণিতে বিভক্ত করেন তবে test:testQuickব্যর্থ পরীক্ষাগুলি পুনরায় চালনার জন্য আরও কার্যকর উপায় তৈরি করতে আপনি ওয়াইল্ডকার্ড ব্যবহার করতে পারেন ))

নোট করুন যে স্কাল টেস্টে পরীক্ষার জন্য নামকরণ একটি পরীক্ষা শ্রেণি, নির্দিষ্ট পরীক্ষা পদ্ধতি নয়, সুতরাং সমস্ত অবিচলিত পদ্ধতি কার্যকর করা হয়।

পরীক্ষার শ্রেণিতে যদি আপনার অনেকগুলি পরীক্ষার পদ্ধতি থাকে তবে এগুলি পৃথক শ্রেণিতে বিভক্ত করুন বা তাদের যথাযথভাবে ট্যাগ করুন। (এটি একটি সংকেত হতে পারে যে পরীক্ষার অধীন শ্রেণি একক দায়িত্বের নীতি লঙ্ঘন করে এবং একটি রিফ্যাক্টরিং ব্যবহার করতে পারে))


10
যারা "কোন পরীক্ষা চালানো হয়নি" তাদের জন্য: *YourTestClassঅবশ্যই শ্রেণীর নাম হতে হবে class ফাইলের নাম নয়।
এম কে্যাটলিস্ট 3

1
এটি কেবলমাত্র আমার জন্য পরীক্ষার পরিবর্তে টেস্ট ছিল।
জান ক্লেম্যানস স্টফ্রেজেন

11

শুধু টাইলারের উদাহরণ সহজ করার জন্য।

test:-প্রিফিক্স প্রয়োজন হয় না।

সুতরাং তার উদাহরণ অনুসারে:

ইন sbt-console:

testOnly *LoginServiceSpec

এবং টার্মিনালে:

sbt "testOnly *LoginServiceSpec"

0

এখানে Scalatest পৃষ্ঠার রানার ব্যবহার এবং উপর বর্ধিত আলোচনা -tএবং -zঅপশন

এই পোস্টটি দেখায় যে কোন পরীক্ষা ফাইলগুলির জন্য কী আদেশগুলি কাজ করে FunSpec

পরীক্ষার ফাইলটি এখানে:

package com.github.mrpowers.scalatest.example

import org.scalatest.FunSpec

class CardiBSpec extends FunSpec {

  describe("realName") {

    it("returns her birth name") {
      assert(CardiB.realName() === "Belcalis Almanzar")
    }

  }

  describe("iLike") {

    it("works with a single argument") {
      assert(CardiB.iLike("dollars") === "I like dollars")
    }

    it("works with multiple arguments") {
      assert(CardiB.iLike("dollars", "diamonds") === "I like dollars, diamonds")
    }

    it("throws an error if an integer argument is supplied") {
      assertThrows[java.lang.IllegalArgumentException]{
        CardiB.iLike()
      }
    }

    it("does not compile with integer arguments") {
      assertDoesNotCompile("""CardiB.iLike(1, 2, 3)""")
    }

  }

}

এই কমান্ডটি iLikeবর্ণনামূলক ব্লকে (এসবিটি কমান্ড লাইন থেকে) চারটি পরীক্ষা চালায় :

testOnly *CardiBSpec -- -z iLike

আপনি উদ্ধৃতি চিহ্নগুলিও ব্যবহার করতে পারেন, সুতরাং এটি কাজ করবে:

testOnly *CardiBSpec -- -z "iLike"

এটি একটি একক পরীক্ষা চালাবে:

testOnly *CardiBSpec -- -z "works with multiple arguments"

এটি "কাজ করে" দিয়ে শুরু হওয়া দুটি পরীক্ষা চালাবে:

testOnly *CardiBSpec -- -z "works with"

আমি ফাইলটিতে -tকোনও পরীক্ষা চালানোর বিকল্পটি পেতে পারি না CardiBSpec। এই আদেশটি কোনও পরীক্ষা চালায় না:

testOnly *CardiBSpec -- -t "works with multiple arguments"

-tপরীক্ষাগুলি describeব্লকগুলিতে বাসা বাঁধা না থাকলে বিকল্পটি কাজ করে বলে মনে হচ্ছে । আসুন অন্য পরীক্ষা ফাইলটি একবার দেখুন:

class CalculatorSpec extends FunSpec {
  it("adds two numbers") {
    assert(Calculator.addNumbers(3, 4) === 7)
  }
}

-t একক পরীক্ষা চালাতে ব্যবহার করা যেতে পারে:

testOnly *CalculatorSpec -- -t "adds two numbers"

-z একক পরীক্ষা চালাতেও ব্যবহার করা যেতে পারে:

testOnly *CalculatorSpec -- -z "adds two numbers"

আপনি যদি এই উদাহরণগুলি চালাতে চান তবে এই রেপোটি দেখুন ।

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