বৈশিষ্ট্য লঞ্চ পতাকা মধ্যে পরীক্ষা কোড

ফিচার লঞ্চ ফ্ল্যাগ চালু হওয়ার সাথে সাথে নতুন কিছু টেস্টিং নীতিমালা এসেছে, যা আপনাকে অবশ্যই মেনে চলতে হবে:

  • আপনার পরীক্ষাগুলিতে ফ্ল্যাগটির সক্রিয় এবং নিষ্ক্রিয় উভয় আচরণই অন্তর্ভুক্ত থাকতে হবে।
  • টেস্টিং চলাকালীন ফ্ল্যাগের মান নির্ধারণ করতে আপনাকে অবশ্যই আনুষ্ঠানিক পদ্ধতি ব্যবহার করতে হবে।
  • xTS টেস্টের মধ্যে ফ্ল্যাগের মান ওভাররাইড করা উচিত নয়।

পরবর্তী অংশে এই নীতিমালাগুলো মেনে চলার জন্য আপনাকে অবশ্যই ব্যবহার করতে হবে এমন আনুষ্ঠানিক পদ্ধতিগুলো দেওয়া হয়েছে।

আপনার ফ্ল্যাগ করা কোড পরীক্ষা করুন

পরীক্ষার দৃশ্যকল্প ব্যবহৃত প্রক্রিয়া
ফ্ল্যাগের মান প্রায়শই পরিবর্তিত হলে স্থানীয় পরীক্ষা করা হয়। রানটাইমে একটি ফ্ল্যাগের মান পরিবর্তন -এ আলোচিত অ্যান্ড্রয়েড ডিবাগ ব্রিজ।
যখন ফ্ল্যাগের মান ঘন ঘন পরিবর্তন হয় না, তখন স্থানীয় পরীক্ষা করা। ফিচার লঞ্চ ফ্ল্যাগের মান সেট করুন -এ আলোচিত ফ্ল্যাগ ভ্যালু ফাইল।
এন্ড-টু-এন্ড টেস্টিং যেখানে ফ্ল্যাগের মান পরিবর্তিত হয় End-to-end টেস্ট তৈরি করার ক্ষেত্রে আলোচিত FeatureFlagTargetPreparer
ইউনিট টেস্টিং যেখানে ফ্ল্যাগের মান পরিবর্তিত হয় Create unit tests (Java and Kotlin) অথবা Create unit tests (C and C++) -এ আলোচিত @EnableFlags এবং @DisableFlags সহ SetFlagsRule
এন্ড-টু-এন্ড বা ইউনিট টেস্টিং যেখানে ফ্ল্যাগের মান পরিবর্তন করা যায় না। "Create end-to-end or unit tests where flag values ​​don't change" অংশে আলোচিত CheckFlagsRule

এন্ড-টু-এন্ড টেস্ট তৈরি করুন

AOSP-তে FeatureFlagTargetPreparer নামে একটি ক্লাস রয়েছে, যা একটি ডিভাইসে এন্ড-টু-এন্ড টেস্টিং সক্ষম করে। এই ক্লাসটি ইনপুট হিসেবে ফ্ল্যাগ ভ্যালু ওভাররাইড গ্রহণ করে, টেস্ট সম্পাদনের আগে ডিভাইসের কনফিগারেশনে সেই ফ্ল্যাগগুলো সেট করে এবং সম্পাদনের পরে ফ্ল্যাগগুলো পুনরুদ্ধার করে।

আপনি টেস্ট মডিউল এবং টেস্ট কনফিগ লেভেলে FeatureFlagTargetPreparer ক্লাসের কার্যকারিতা প্রয়োগ করতে পারেন।

একটি টেস্ট মডিউল কনফিগারেশনে FeatureFlagTargetPreparer প্রয়োগ করুন

একটি টেস্ট মডিউল কনফিগারেশনে FeatureFlagTargetPreparer প্রয়োগ করতে, AndroidTest.xml টেস্ট মডিউল কনফিগারেশন ফাইলে FeatureFlagTargetPreparer এবং ফ্ল্যাগ ভ্যালু ওভাররাইডগুলি অন্তর্ভুক্ত করুন:

  <target_preparer class="com.android.tradefed.targetprep.FeatureFlagTargetPreparer">
        <option name="flag-value"
            value="permissions/com.android.permission.flags.device_aware_permission_grant=true"/>
        <option name="flag-value"
            value="virtual_devices/android.companion.virtual.flags.stream_permissions=true"/>
    </target_preparer>

কোথায়:

  • target.preparer class সর্বদা com.android.tradefed.targetprep.FeatureFlagTargetPreparer এ সেট করা থাকে।
  • option হলো ফ্ল্যাগ ওভাররাইড, যেখানে name সর্বদা flag-value এবং value namespace/aconfigPackage.flagName=true|false হিসেবে সেট করা থাকে।

ফ্ল্যাগ অবস্থার উপর ভিত্তি করে প্যারামিটারযুক্ত টেস্ট মডিউল তৈরি করুন

ফ্ল্যাগ অবস্থার উপর ভিত্তি করে প্যারামিটারযুক্ত টেস্ট মডিউল তৈরি করতে:

  1. AndroidTest.xml টেস্ট মডিউল কনফিগারেশন ফাইলে FeatureFlagTargetPreparer অন্তর্ভুক্ত করুন:

    <target_preparer class="com.android.tradefed.targetprep.FeatureFlagTargetPreparer" >
    
  2. Android.bp বিল্ড ফাইলের test_module_config বিভাগে ফ্ল্যাগ ভ্যালু অপশনগুলো নির্দিষ্ট করুন:

    android_test {
        name: "MyTest"
        ...
    }
    
    test_module_config {
        name: "MyTestWithMyFlagEnabled",
        base: "MyTest",
        ...
        options: [
            {name: "flag-value", value: "telephony/com.android.internal.telephony.flags.oem_enabled_satellite_flag=true"},
        ],
    }
    
    test_module_config {
        name: "MyTestWithMyFlagDisabled",
        base: "MyTest",
        ...
        options: [
            {name: "flag-value", value: "telephony/com.android.internal.telephony.flags.carrier_enabled_satellite_flag=true"},
        ],
    }
    

    options ফিল্ডটিতে ফ্ল্যাগ ওভাররাইডগুলো থাকে, যেখানে name সর্বদা flag-value এবং value namespace/aconfigPackage.flagName=true|false হিসেবে সেট করা থাকে।

ইউনিট টেস্ট তৈরি করুন (জাভা এবং কোটলিন)

এই অংশে জাভা এবং কোটলিন টেস্টে ক্লাস এবং মেথড লেভেলে (প্রতি-টেস্ট) aconfig ফ্ল্যাগের মান ওভাররাইড করার পদ্ধতি বর্ণনা করা হয়েছে।

প্রচুর ফ্ল্যাগ সহ একটি বড় কোডবেসে স্বয়ংক্রিয় ইউনিট টেস্ট লেখার জন্য, এই ধাপগুলো অনুসরণ করুন:

  1. সমস্ত কোড ব্রাঞ্চ পরীক্ষা করার জন্য @EnableFlags এবং @DisableFlags অ্যানোটেশন সহ SetFlagsRule ক্লাসটি ব্যবহার করুন।
  2. সাধারণ টেস্ট বাগ এড়াতে SetFlagsRule.ClassRule মেথডটি ব্যবহার করুন।
  3. বিভিন্ন ধরনের ফ্ল্যাগ কনফিগারেশন জুড়ে আপনার ক্লাসগুলো পরীক্ষা করতে FlagsParameterization ব্যবহার করুন।

সমস্ত কোড শাখা পরীক্ষা করুন

যেসব প্রোজেক্টে ফ্ল্যাগ অ্যাক্সেস করার জন্য স্ট্যাটিক ক্লাস ব্যবহার করা হয়, সেখানে ফ্ল্যাগের মান ওভাররাইড করার জন্য SetFlagsRule হেল্পার ক্লাসটি দেওয়া হয়েছে। নিচের কোড স্নিপেটটিতে দেখানো হয়েছে কীভাবে SetFlagsRule অন্তর্ভুক্ত করে একসাথে একাধিক ফ্ল্যাগ সক্রিয় করা যায়:

  import android.platform.test.annotations.EnableFlags;
  import android.platform.test.flag.junit.SetFlagsRule;
  import com.example.android.aconfig.demo.flags.Flags;
  ...
    @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    @Test
    @EnableFlags({Flags.FLAG_FLAG_FOO, Flags.FLAG_FLAG_BAR})
    public void test_flag_foo_and_flag_bar_turned_on() {
    ...
    }

কোথায়:

  • @Rule হলো একটি অ্যানোটেশন যা SetFlagsRule ক্লাসের ফ্ল্যাগ-JUnit ডিপেন্ডেন্সি যোগ করতে ব্যবহৃত হয়।
  • SetFlagsRule হলো ফ্ল্যাগের মান ওভাররাইড করার জন্য প্রদত্ত একটি হেল্পার ক্লাস। SetFlagsRule কীভাবে ডিফল্ট মান নির্ধারণ করে, সে সম্পর্কে জানতে ডিভাইসের ডিফল্ট মান (Device default values) দেখুন।
  • @EnableFlags হলো একটি অ্যানোটেশন যা যেকোনো সংখ্যক ফ্ল্যাগের নাম গ্রহণ করে। ফ্ল্যাগ নিষ্ক্রিয় করতে, @DisableFlags ব্যবহার করুন। আপনি এই অ্যানোটেশনগুলো একটি মেথড বা একটি ক্লাস উভয় ক্ষেত্রেই প্রয়োগ করতে পারেন।

সম্পূর্ণ টেস্ট প্রক্রিয়ার জন্য ফ্ল্যাগের মান সেট করুন, যা SetFlagsRule থেকে শুরু হয় এবং এটি টেস্টের যেকোনো @Before অ্যানোটেড সেটআপ মেথডের আগে থাকে। SetFlagsRule শেষ হলে ফ্ল্যাগের মান তার আগের অবস্থায় ফিরে আসে, যা যেকোনো @After অ্যানোটেড সেটআপ মেথডের পরে ঘটে।

ফ্ল্যাগগুলো সঠিকভাবে সেট করা আছে কিনা তা নিশ্চিত করুন।

পূর্বে যেমন উল্লেখ করা হয়েছে, SetFlagsRule JUnit-এর @Rule অ্যানোটেশনের সাথে ব্যবহৃত হয়, যার মানে হলো SetFlagsRule টেস্ট ক্লাসের কনস্ট্রাক্টর, অথবা কোনো @BeforeClass বা @AfterClass অ্যানোটেশনযুক্ত মেথডের সময় আপনার ফ্ল্যাগগুলো সঠিকভাবে সেট করা নিশ্চিত করতে পারে না।

টেস্ট ফিক্সচারগুলো যেন সঠিক ক্লাস ভ্যালু দিয়ে তৈরি হয়, তা নিশ্চিত করতে SetFlagsRule.ClassRule মেথডটি ব্যবহার করুন, যাতে আপনার ফিক্সচারগুলো @Before অ্যানোটেড setup মেথড তৈরি না হওয়া পর্যন্ত তৈরি না হয়:

  import android.platform.test.annotations.EnableFlags;
  import android.platform.test.flag.junit.SetFlagsRule;
  import com.example.android.aconfig.demo.flags.Flags;

  class ExampleTest {
    @ClassRule public static final SetFlagsRule.ClassRule mClassRule = new SetFlagsRule.ClassRule();
    @Rule public final SetFlagsRule mSetFlagsRule = mClassRule.createSetFlagsRule();

    private DemoClass underTest = new DemoClass();

    @Test
    @EnableFlags(Flags.FLAG_FLAG_FOO)
    public void test_flag_foo_turned_on() {
      ...
    }
  }

SetFlagsRule.ClassRule ক্লাস রুলটি যোগ করার ফলে, DemoClass এর কনস্ট্রাক্টর যখন FLAG_FLAG_FOO রিড করে, তখন test_flag_foo_turned_on রান করার আগেই ফেইল করে।

যদি আপনার পুরো ক্লাসের জন্য একটি ফ্ল্যাগ সক্রিয় করার প্রয়োজন হয়, তাহলে @EnableFlags অ্যানোটেশনটি ক্লাস লেভেলে (ক্লাস ডিক্লারেশনের আগে) নিয়ে যান। অ্যানোটেশনটি ক্লাস লেভেলে নিয়ে গেলে SetFlagsRule.ClassRule নিশ্চিত করতে পারে যে টেস্ট ক্লাসের কনস্ট্রাক্টরের সময়, অথবা যেকোনো @BeforeClass বা @AfterClass অ্যানোটেশনযুক্ত মেথডের সময় ফ্ল্যাগটি সঠিকভাবে সেট করা হয়েছে।

একাধিক ফ্ল্যাগ কনফিগারেশন জুড়ে পরীক্ষা চালান

যেহেতু আপনি প্রতিটি পরীক্ষার জন্য আলাদাভাবে ফ্ল্যাগের মান নির্ধারণ করতে পারেন, তাই আপনি প্যারামিটারাইজেশন ব্যবহার করে একাধিক ফ্ল্যাগ কনফিগারেশন জুড়ে পরীক্ষা চালাতেও পারেন:

...
import com.example.android.aconfig.demo.flags.Flags;
...

@RunWith(ParameterizedAndroidJunit4::class)
class FooBarTest {
    @Parameters(name = "{0}")
    public static List<FlagsParameterization> getParams() {
        return FlagsParameterization.allCombinationsOf(Flags.FLAG_FOO, Flags.FLAG_BAR);
    }

    @Rule
    public SetFlagsRule mSetFlagsRule;

    public FooBarTest(FlagsParameterization flags) {
        mSetFlagsRule = new SetFlagsRule(flags);
    }

    @Test public void fooLogic() {...}

    @DisableFlags(Flags.FLAG_BAR)
    @Test public void legacyBarLogic() {...}

    @EnableFlags(Flags.FLAG_BAR)
    @Test public void newBarLogic() {...}
}

উল্লেখ্য যে, SetFlagsRule ব্যবহার করলে, কিন্তু প্যারামিটারাইজেশন ছাড়া, এই ক্লাসটি তিনটি টেস্ট ( fooLogic , legacyBarLogic , এবং newBarLogic ) চালায়। ডিভাইসে FLAG_FOO এবং FLAG_BAR এর যে মান সেট করা থাকে, সেই অনুযায়ীই fooLogic মেথডটি রান করে।

যখন প্যারামিটারাইজেশন যোগ করা হয়, তখন FlagsParameterization.allCombinationsOf মেথডটি FLAG_FOO এবং FLAG_BAR ফ্ল্যাগগুলোর সমস্ত সম্ভাব্য সংমিশ্রণ তৈরি করে:

  • FLAG_FOO true এবং FLAG_BAR true
  • FLAG_FOO true এবং FLAG_BAR false
  • FLAG_FOO false এবং FLAG_BAR true
  • FLAG_FOO মিথ্যা এবং FLAG_BAR false

সরাসরি ফ্ল্যাগের মান পরিবর্তন করার পরিবর্তে, @DisableFlags এবং @EnableFlags অ্যানোটেশনগুলো প্যারামিটারের শর্তের উপর ভিত্তি করে ফ্ল্যাগের মান পরিবর্তন করে। উদাহরণস্বরূপ, legacyBarLogic শুধুমাত্র তখনই চলে যখন FLAG_BAR নিষ্ক্রিয় থাকে, যা চারটি ফ্ল্যাগ সংমিশ্রণের মধ্যে দুটিতে ঘটে। অন্য দুটি সংমিশ্রণের জন্য legacyBarLogic বাদ দেওয়া হয়।

আপনার ফ্ল্যাগগুলির প্যারামিটারাইজেশন তৈরি করার দুটি পদ্ধতি রয়েছে:

  • FlagsParameterization.allCombinationsOf(String...) প্রতিটি টেস্টের 2^n বার রান সম্পাদন করে। উদাহরণস্বরূপ, একটি ফ্ল্যাগ 2x টি টেস্ট রান করে অথবা চারটি ফ্ল্যাগ 16x টি টেস্ট রান করে।

  • FlagsParameterization.progressionOf(String...) প্রতিটি টেস্টের n+1 বার রান সম্পাদন করে। উদাহরণস্বরূপ, একটি ফ্ল্যাগ 2x টি টেস্ট রান করে এবং চারটি ফ্ল্যাগ 5x টি টেস্ট রান করে।

ইউনিট টেস্ট তৈরি করুন (C এবং C++)

AOSP-তে GoogleTest ফ্রেমওয়ার্কে লেখা C এবং C++ টেস্টের জন্য ফ্ল্যাগ ভ্যালু ম্যাক্রো অন্তর্ভুক্ত রয়েছে।

  1. আপনার টেস্ট সোর্সে ম্যাক্রো ডেফিনিশন এবং aconfig-দ্বারা তৈরি লাইব্রেরিগুলো অন্তর্ভুক্ত করুন:

    #include <flag_macros.h>
    #include "android_cts_flags.h"
    
  2. আপনার টেস্ট সোর্সে, টেস্ট কেসগুলোর জন্য TEST এবং TESTF ম্যাক্রো ব্যবহার করার পরিবর্তে TEST_WITH_FLAGS এবং TEST_F_WITH_FLAGS ব্যবহার করুন।

    #define TEST_NS android::cts::flags::tests
    
    ...
    
    TEST_F_WITH_FLAGS(
      TestFWithFlagsTest,
      requies_disabled_flag_enabled_skip,
      REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(TEST_NS, readwrite_enabled_flag))
    ) {
      TestFail();
    }
    
    ...
    
    TEST_F_WITH_FLAGS(
      TestFWithFlagsTest,
      multi_flags_for_same_state_skip,
      REQUIRES_FLAGS_ENABLED(
          ACONFIG_FLAG(TEST_NS, readwrite_enabled_flag),
          LEGACY_FLAG(aconfig_flags.cts, TEST_NS, readwrite_disabled_flag)
      )
    ) {
      TestFail();
    }
    
    ...
    
    TEST_WITH_FLAGS(
      TestWithFlagsTest,
      requies_disabled_flag_enabled_skip,
      REQUIRES_FLAGS_DISABLED(
          LEGACY_FLAG(aconfig_flags.cts, TEST_NS, readwrite_enabled_flag))
    ) {
      FAIL();
    }
    
    ...
    
    TEST_WITH_FLAGS(
      TestWithFlagsTest,
      requies_enabled_flag_enabled_executed,
      REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(TEST_NS, readwrite_enabled_flag))
    ) {
      TestWithFlagsTestHelper::executed_tests.insert(
          "requies_enabled_flag_enabled_executed");
    }
    

    কোথায়:

    • TEST এবং TEST_F ম্যাক্রোর পরিবর্তে TEST_WITH_FLAGS এবং TEST_F_WITH_FLAGS ম্যাক্রো ব্যবহার করা হয়।
    • REQUIRES_FLAGS_ENABLED এমন কিছু ফিচার রিলিজ ফ্ল্যাগ নির্ধারণ করে, যেগুলোকে অবশ্যই এনাবলড শর্তটি পূরণ করতে হবে। আপনি এই ফ্ল্যাগগুলো ACONFIG_FLAG অথবা LEGACY_FLAG ম্যাক্রোতে লিখতে পারেন।
    • REQUIRES_FLAGS_DISABLED এমন এক সেট ফিচার ফ্ল্যাগ নির্ধারণ করে, যেগুলোকে অবশ্যই ডিজেবলড (disabled) শর্তটি পূরণ করতে হবে। আপনি এই ফ্ল্যাগগুলো ACONFIG_FLAG অথবা LEGACY_FLAG ম্যাক্রোতে লিখতে পারেন।
    • ACONFIG_FLAG (TEST_NS, readwrite_enabled_flag) হলো aconfig ফাইলে সংজ্ঞায়িত ফ্ল্যাগগুলির জন্য ব্যবহৃত একটি ম্যাক্রো। এই ম্যাক্রোটি একটি নেমস্পেস ( TEST_NS ) এবং একটি ফ্ল্যাগের নাম ( readwrite_enabled_flag ) গ্রহণ করে।
    • LEGACY_FLAG(aconfig_flags.cts, TEST_NS, readwrite_disabled_flag) হলো একটি ম্যাক্রো যা ডিভাইস কনফিগে ডিফল্টভাবে সেট করা ফ্ল্যাগগুলির জন্য ব্যবহৃত হয়।
  3. আপনার Android.bp বিল্ড ফাইলে, aconfig-দ্বারা তৈরি লাইব্রেরি এবং প্রাসঙ্গিক ম্যাক্রো লাইব্রেরিগুলোকে টেস্ট ডিপেন্ডেন্সি হিসেবে যোগ করুন:

    cc_test {
      name: "FlagMacrosTests",
      srcs: ["src/FlagMacrosTests.cpp"],
      static_libs: [
          "libgtest",
          "libflagtest",
          "my_aconfig_lib",
      ],
      shared_libs: [
          "libbase",
          "server_configurable_flags",
      ],
      test_suites: ["general-tests"],
      ...
    }
    
  4. এই কমান্ডটি দিয়ে টেস্টগুলো স্থানীয়ভাবে চালান:

    atest FlagMacrosTests
    

    যদি my_namespace.android.myflag.tests.my_flag ফ্ল্যাগটি নিষ্ক্রিয় থাকে, তাহলে পরীক্ষার ফলাফল হবে:

    [1/2] MyTest#test1: IGNORED (0ms)
    [2/2] MyTestF#test2: PASSED (0ms)
    

    যদি my_namespace.android.myflag.tests.my_flag ফ্ল্যাগটি সক্রিয় থাকে, তাহলে পরীক্ষার ফলাফল হবে:

    [1/2] MyTest#test1: PASSED (0ms)
    [2/2] MyTestF#test2: IGNORED (0ms)
    

এন্ড-টু-এন্ড বা ইউনিট টেস্ট তৈরি করুন যেখানে ফ্ল্যাগের মান পরিবর্তন হয় না।

যেসব টেস্ট কেসের ক্ষেত্রে আপনি ফ্ল্যাগ ওভাররাইড করতে পারেন না এবং শুধুমাত্র বর্তমান ফ্ল্যাগ অবস্থার উপর ভিত্তি করে টেস্ট ফিল্টার করতে পারেন, সেখানে RequiresFlagsEnabled এবং RequiresFlagsDisabled অ্যানোটেশন সহ CheckFlagsRule রুলটি ব্যবহার করুন।

নিম্নলিখিত ধাপগুলি আপনাকে দেখাবে কীভাবে একটি এন্ড-টু-এন্ড বা ইউনিট টেস্ট তৈরি এবং রান করতে হয়, যেখানে ফ্ল্যাগের মান ওভাররাইড করা যায় না:

  1. আপনার টেস্ট কোডে টেস্ট ফিল্টারিং প্রয়োগ করতে CheckFlagsRule ব্যবহার করুন। এছাড়াও, আপনার টেস্টের জন্য ফ্ল্যাগের প্রয়োজনীয়তা নির্দিষ্ট করতে RequiresFlagsEnabled এবং RequiredFlagsDisabled জাভা অ্যানোটেশনগুলো ব্যবহার করুন।

    ডিভাইস-সাইড টেস্টটি DeviceFlagsValueProvider ক্লাস ব্যবহার করে:

    @RunWith(JUnit4.class)
    public final class FlagAnnotationTest {
      @Rule
      public final CheckFlagsRule mCheckFlagsRule =
              DeviceFlagsValueProvider.createCheckFlagsRule();
    
      @Test
      @RequiresFlagsEnabled(Flags.FLAG_FLAG_NAME_1)
      public void test1() {}
    
      @Test
      @RequiresFlagsDisabled(Flags.FLAG_FLAG_NAME_1)
      public void test2() {}
    }
    

    হোস্ট-সাইড টেস্টটি HostFlagsValueProvider ক্লাস ব্যবহার করে:

    @RunWith(DeviceJUnit4ClassRunner.class)
    public final class FlagAnnotationTest extends BaseHostJUnit4Test {
      @Rule
      public final CheckFlagsRule mCheckFlagsRule =
              HostFlagsValueProvider.createCheckFlagsRule(this::getDevice);
    
      @Test
      @RequiresFlagsEnabled(Flags.FLAG_FLAG_NAME_1)
      public void test1() {}
    
      @Test
      @RequiresFlagsDisabled(Flags.FLAG_FLAG_NAME_1)
      public void test2() {}
    }
    
  2. আপনার পরীক্ষার জন্য বিল্ড ফাইলের static_libs বিভাগে jflag-unit এবং aconfig-generated লাইব্রেরিগুলো যোগ করুন:

    android_test {
        name: "FlagAnnotationTests",
        srcs: ["*.java"],
        static_libs: [
            "androidx.test.rules",
            "my_aconfig_lib",
            "flag-junit",
            "platform-test-annotations",
        ],
        test_suites: ["general-tests"],
    }
    
  3. স্থানীয়ভাবে পরীক্ষাটি চালানোর জন্য নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

    atest FlagAnnotationTests
    

    যদি Flags.FLAG_FLAG_NAME_1 ফ্ল্যাগটি নিষ্ক্রিয় থাকে, তাহলে পরীক্ষার ফলাফল হবে:

    [1/2] com.cts.flags.FlagAnnotationTest#test1: ASSUMPTION_FAILED (10ms)
    [2/2] com.cts.flags.FlagAnnotationTest#test2: PASSED (2ms)
    

    অন্যথায় পরীক্ষার ফলাফল হলো:

    [1/2] com.cts.flags.FlagAnnotationTest#test1: PASSED (2ms)
    [2/2] com.cts.flags.FlagAnnotationTest#test2: ASSUMPTION_FAILED (10ms)
    

ডিভাইসের ডিফল্ট মান

ইনিশিয়ালাইজ করা SetFlagsRule ডিভাইস থেকে ফ্ল্যাগ ভ্যালু ব্যবহার করে। যদি ডিভাইসের ফ্ল্যাগ ভ্যালুটি ওভাররাইড করা না হয়, যেমন adb দিয়ে, তাহলে ডিফল্ট ভ্যালুটি বিল্ডের রিলিজ কনফিগারেশনের সমান হয়। যদি ডিভাইসের ভ্যালুটি ওভাররাইড করা হয়ে থাকে, তাহলে SetFlagsRule সেই ওভাররাইড করা ভ্যালুটিকেই ডিফল্ট হিসেবে ব্যবহার করে।

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

প্রতিটি পরীক্ষার পরে, SetFlagsRule , Flags এ থাকা FeatureFlags ইনস্ট্যান্সটিকে তার আসল FeatureFlagsImpl এ পুনরুদ্ধার করে, যাতে এটি অন্যান্য টেস্ট মেথড এবং ক্লাসের উপর কোনো পার্শ্ব প্রতিক্রিয়া না ফেলে।