বসন্ত পরীক্ষায় পরিবেশের পরিবর্তনশীল বা সিস্টেমের সম্পত্তি কীভাবে সেট করবেন?


95

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

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
public class TestWarSpringContext { ... }

যদি আমি টীকাগুলির সাথে অ্যাপ্লিকেশন প্রসঙ্গটি কনফিগার করি তবে আমি একটি হুক দেখি না যেখানে বসন্তের প্রসঙ্গটি শুরু করার আগে আমি কিছু করতে পারি।

উত্তর:


127

আপনি স্ট্যাটিক ইনিশিয়ালাইজারে সিস্টেমের সম্পত্তিটি শুরু করতে পারেন:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
public class TestWarSpringContext {

    static {
        System.setProperty("myproperty", "foo");
    }

}

স্ট্যাটিক ইনিশিয়ালাইজার কোডটি বসন্ত অ্যাপ্লিকেশন প্রসঙ্গটি শুরু করার আগেই কার্যকর করা হবে।


14
বোকা আমাকে - ঠিক আছে, এটি কাজ করবে। আরও ভাল: সম্ভবত @BeforeClassসিস্টেমের সম্পত্তি সেট করার একটি @AfterClassপদ্ধতি এবং এটি সরিয়ে ফেলার একটি পদ্ধতিও কার্যকর হবে এবং নিজের পরে খুব ভালভাবে পরিষ্কার করা হবে। (যদিও এটি চেষ্টা করে দেখুন না))
হ্যান্স-পিটার স্টার

4
@ বিফোরক্লাস চেষ্টা করেছেন - এবং পরীক্ষার ক্ষেত্রে অন্যান্য সম্পত্তি সেট করার আগে সিস্টেম বৈশিষ্ট্য নির্ধারণের জন্য এটি ভাল কাজ করেছে
wbdarby

এর জন্য ধন্যবাদ. স্থির জিনিসটি কাজ করতে পারেনি তবে @ বিফারক্লাসের সাথে একটি ছোট্ট পদ্ধতি কাজ করেছে!
মিডন অগ্নিহোতম্রাম

লগ 4j2 কনফিগারেশন ফাইলের সম্পত্তি পরিবর্তন করা হলে এই প্রক্রিয়াটি কাজ করে না। দেখে মনে হচ্ছে যে স্প্রিংটি কোডের সেই স্থির অংশের আগে ওয়েডিং (এবং তাই ভুলভাবে লগইন করা হচ্ছে)।
lucasvc

87

এটি করার সঠিক উপায়, স্প্রিং ৪.১ দিয়ে শুরু করা, একটি @TestPropertySourceটীকা ব্যবহার করা ।

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
@TestPropertySource(properties = {"myproperty = foo"})
public class TestWarSpringContext {
    ...    
}

মধ্যে @TestPropertySource দেখুন স্প্রিং ডক্স এবং Javadocs


4
এই টীকাটি একটি বৈশিষ্ট্য ফাইলের পথকেও সমর্থন করে।
মিগডাস

4
আমি পরীক্ষার সময় স্প্রিং ক্লাউড কনফিগারেশন ক্লায়েন্ট লেবেলটি স্যুইচ করতে পারি@TestPropertySource(properties={"spring.cloud.config.label=feature/branch"})
মার্সেলো দে বিক্রয়

4
উত্তম উত্তর, কিন্তু দুঃখের সাথে আমার পক্ষে স্প্রিং ৪.২.৯ ব্যবহার করে কাজ করা হয়নি, সম্পত্তিটি সর্বদা খালি ছিল। কেবল স্ট্যাটিক ব্লক কাজ করেছে ... অ্যাপ্লিকেশন বৈশিষ্ট্যের জন্য কাজ করেছে, তবে সিস্টেমের বৈশিষ্ট্যের জন্য নয়।
গ্রেগোর

প্রথমে আমি স্থিতিশীল সংস্করণটি দেখেছি এবং চেষ্টা করেছি (যা কাজ করেছিল), তবে এই টিকাটি আরও ক্লিনার এবং আরও বেশি পছন্দনীয় (আমার জন্য, এটিও মনোমুগ্ধকর মতো কাজ করে)।
বেরুস

4
এটি এমন একটি Environmentসম্পত্তি সরবরাহ করে যা "পরিবেশের পরিবর্তনশীল" থেকে আলাদা।
অরেঞ্জডোগ

11

একটি সিস্টেম বৈশিষ্ট্য আরম্ভ করার জন্য একটি পরীক্ষা অ্যাপ্লিকেশনসন্টেক্সটাইনাইজার ব্যবহার করতে পারেন:

public class TestApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext>
{
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext)
    {
        System.setProperty("myproperty", "value");
    }
}

এবং তারপরে এটি বসন্ত প্রসঙ্গে কনফিগার ফাইলের ফাইলগুলি ছাড়াও পরীক্ষার শ্রেণিতে কনফিগার করুন:

@ContextConfiguration(initializers = TestApplicationContextInitializer.class, locations = "classpath:whereever/context.xml", ...)
@RunWith(SpringJUnit4ClassRunner.class)
public class SomeTest
{
...
}

কোনও ইউনিট পরীক্ষার জন্য যদি একটি নির্দিষ্ট সিস্টেমের সম্পত্তি সেট করা উচিত হয় তবে এইভাবে কোডের সদৃশতা এড়ানো যায়।


এই স্প্রিং বুট 2.x এবং Junit 5.x (ব্যবহারে পুরোপুরি কাজ করে @SpringBootTestবা কোন পরীক্ষা slicing টীকা)
Wim Deblauwe

11

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

পরিবেশগত পরিবর্তনসমূহ। Html

ডক্স থেকে একটি দ্রুত উদাহরণ, @ স্প্রিংবুটটেষ্টের সাথে কাজ করতে সংশোধিত

@SpringBootTest
public class EnvironmentVariablesTest {
   @ClassRule
   public final EnvironmentVariables environmentVariables = new EnvironmentVariables().set("name", "value");

   @Test
   public void test() {
     assertEquals("value", System.getenv("name"));
   }
 }

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

4

যদি আপনি চান যে আপনার ভেরিয়েবলগুলি সমস্ত পরীক্ষার জন্য বৈধ হতে পারে তবে application.propertiesআপনার টেস্ট রিসোর্স ডিরেক্টরিতে একটি ফাইল থাকতে পারে (ডিফল্টরূপে src/test/resources): এটি এর মতো দেখতে পাবেন:

MYPROPERTY=foo

এটি তখন লোড হবে এবং ব্যবহৃত হবে যদি না আপনার সংজ্ঞা @TestPropertySourceবা অনুরূপ কোনও পদ্ধতির মাধ্যমে থাকে - যেখানে সম্পত্তি লোড করা হয় তার সঠিক ক্রমটি স্প্রিং ডকুমেন্টেশন অধ্যায় 24-এ পাওয়া যাবে ternal বহিরাগত কনফিগারেশন


2

আপনি সিস্টেম বৈশিষ্ট্যগুলি ভিএম আর্গুমেন্ট হিসাবে সেট করতে পারেন।

যদি আপনার প্রকল্পটি কোনও উত্কৃষ্ট প্রকল্প হয় তবে পরীক্ষার ক্লাসটি চালানোর সময় আপনি নিম্নলিখিত কমান্ডটি কার্যকর করতে পারেন:

mvn test -Dapp.url="https://stackoverflow.com"

পরীক্ষার শ্রেণি:

public class AppTest  {
@Test
public void testUrl() {
    System.out.println(System.getProperty("app.url"));
    }
}

আপনি যদি গ্রহণে পৃথক পরীক্ষার শ্রেণি বা পদ্ধতি চালাতে চান তবে:

1) রান -> রান কনফিগারেশন যান

2) বাম দিকে জুনিট বিভাগের অধীনে আপনার পরীক্ষার শ্রেণি নির্বাচন করুন।

3) নিম্নলিখিত করুন:

এখানে চিত্র বর্ণনা লিখুন


2

ইউনিট টেস্টগুলির জন্য, যখন আমি "এমভিএন ক্লিন ইনস্টল" করি তখন সিস্টেম ভেরিয়েবলটি তাত্ক্ষণিকভাবে চালু হয় না কারণ অ্যাপ্লিকেশনটি চালিত কোনও সার্ভার নেই। সুতরাং সিস্টেমের বৈশিষ্ট্যগুলি সেট করতে, আমার এটি pom.xML এ করা দরকার। তাই ভালো:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.21.0</version>
    <configuration>
        <systemPropertyVariables>
            <propertyName>propertyValue</propertyName>
            <MY_ENV_VAR>newValue</MY_ENV_VAR>
            <ENV_TARGET>olqa</ENV_TARGET>
            <buildDirectory>${project.build.directory}</buildDirectory>
        </systemPropertyVariables>
    </configuration>
</plugin>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.