একটি ইউনিট পরীক্ষার প্রকল্প লক্ষ্য অ্যাপ্লিকেশনটির অ্যাপকনফাইগ ফাইলটি লোড করতে পারে?


150

আমি একটি .NET অ্যাপ্লিকেশন (.exe) ইউনিট পরীক্ষা করছি যা কনফিগারেশন বৈশিষ্ট্যগুলি লোড করতে একটি app.config ফাইল ব্যবহার করে। ইউনিট পরীক্ষা অ্যাপ্লিকেশনটিতে নিজেই একটি app.config ফাইল নেই।

আমি ইউনিট পরীক্ষা করার জন্য একটি পদ্ধতি যা কনফিগারেশন সম্পত্তি কোনো সদ্ব্যবহার চেষ্টা করেন, তখন তারা ফিরে নাল । আমি ধরে নিচ্ছি এটি হ'ল কারণ ইউনিট পরীক্ষা অ্যাপ্লিকেশনটি লক্ষ্য অ্যাপ্লিকেশনটির অ্যাপকনফাইগে লোড হচ্ছে না।

এটিকে ওভাররাইড করার কোনও উপায় আছে বা স্থানীয় অ্যাপকনফাইগে লক্ষ্যযুক্ত অ্যাপ.config এর বিষয়বস্তু অনুলিপি করার জন্য আমাকে কী স্ক্রিপ্ট লিখতে হবে?

এই পোস্টটি সদয়ভাবে এই প্রশ্নটি জিজ্ঞাসা করে তবে লেখক সত্যই এটি আমার চেয়ে আলাদা কোণ থেকে দেখছেন।

সম্পাদনা: আমার উল্লেখ করা উচিত যে আমি আমার ইউনিট পরীক্ষার জন্য ভিএস08 টিম সিস্টেম ব্যবহার করছি।

উত্তর:


59

এটি করার সহজ উপায় হ'ল .configআপনার ইউনিট পরীক্ষার মোতায়েন বিভাগে ফাইল যুক্ত করা ।

এটি করতে .testrunconfigআপনার সমাধান আইটেমগুলি থেকে ফাইলটি খুলুন । স্থাপনা বিভাগে, .configআপনার প্রকল্পের বিল্ড ডিরেক্টরি থেকে সম্ভবত আউটপুট ফাইল যুক্ত করুন (সম্ভবত)bin\Debug )।

স্থাপনার বিভাগে তালিকাবদ্ধ যে কোনও কিছু পরীক্ষা চালানোর আগে পরীক্ষার প্রকল্পের কার্যকারী ফোল্ডারে অনুলিপি করা হবে, সুতরাং আপনার কনফিগার-নির্ভর কোডটি ঠিকঠাক চলবে।

সম্পাদনা: আমি যুক্ত করতে ভুলে গেছি, এটি সমস্ত পরিস্থিতিতে কাজ করবে না, তাই আপনাকে .configইউনিট পরীক্ষার নামের সাথে মিলিয়ে আউটপুটটির নাম পরিবর্তন করে এমন একটি স্টার্টআপ স্ক্রিপ্ট অন্তর্ভুক্ত করতে হতে পারে ।


9
পরীক্ষার প্রকল্পে কেবল একটি app.config ফিল যোগ করা অনেক সহজ - আপনার পরে .testrunconfig এর সাথে মোটেও খেলতে হবে না।
রাওল্যান্ড শাল

13
@ রোল্যান্ড যদি আপনি এটি করেন তবে আপনাকে অ্যাপকনফাইগের দুটি অনুলিপি বজায় রাখতে হবে। আমি বরং উভয় জায়গায় app.config আপডেট করার কথা মনে রাখার চেয়ে .testrunconfig সরঞ্জামটি ব্যবহার করে একবার 10 সেকেন্ড ব্যয় করব।
জেরোমি ইরভাইন

66
আপনি কি কেবল একটি অনুলিপি রেফারেন্স যুক্ত করতে পারবেন না? (বিদ্যমান আইটেম যুক্ত করুন ...)
EFraim

6
ইফ্রাইমের মন্তব্যটি গ্রহণযোগ্য উত্তর হওয়া উচিত, এটি অন্য যে কোনও কিছুর চেয়ে সহজ।
রেগেইগুইটার

28
ইফ্রাইমের সলানের জন্য: কমান্ড বোতাম থেকে "অ্যাড লিঙ্ক অ্যাড" ব্যবহার করতে ভুলবেন না। অন্যথায় আপনি এখনও একটি অনুলিপি পাবেন। এছাড়াও, যদিও প্রশ্নটি একটি নেট অ্যাপের জন্য বিশেষত, এটি কোনও ওয়েব অ্যাপের জন্য কাজ করবে না কারণ একটি ওয়েব অ্যাপ্লিকেশনটির কনফিগারেশনের ভুল নাম রয়েছে (ওয়েব.কনফিগ, অ্যাপ.কনফিগ নয়)
রব ভন নেসেলরোড

103

ভিজ্যুয়াল স্টুডিও ২০০৮-এ আমি app.configফাইলটি একটি বিদ্যমান আইটেম হিসাবে পরীক্ষার প্রকল্পে যুক্ত করেছি এবং এটির অনুলিপি না হওয়ার জন্য লিঙ্ক হিসাবে অনুলিপি নির্বাচন করেছি। এইভাবে আমার সমাধানটিতে আমার কাছে কেবল একটি অনুলিপি রয়েছে। বেশ কয়েকটি পরীক্ষামূলক প্রকল্পের সাথে এটি সত্যিই কাজে আসে!

বিদ্যমান আইটেম যুক্ত করুন

লিঙ্ক হিসাবে যুক্ত করুন


7
নিখুঁত উত্তর, সহজ এবং উদ্দেশ্য! +1
কাস্টোডিও

2
এটি সেরা সমাধান এবং উত্তর হিসাবে চিহ্নিত করা উচিত।
নিহার

4
বিদ্যমান আইটেমটিকে "একটি লিঙ্ক হিসাবে" যুক্ত করার জন্য আপনার উচিত: "বিদ্যমান আইটেম যুক্ত করুন ডায়ালগ বাক্সে, আপনি যে প্রকল্পটি লিঙ্ক করতে চান তা সন্ধান করুন এবং নির্বাচন করুন", তারপরে: "ওপেন বোতামের ড্রপ-ডাউন তালিকা থেকে, লিঙ্ক হিসাবে যুক্ত নির্বাচন করুন। "
uriel

এটি আমার জন্য কাজ করে মহান। আমি এমন পরিস্থিতির কথা চিন্তা করার চেষ্টা করছি যেখানে এটি কার্যকর হবে না ... এবং আমি এখন যথেষ্ট চিন্তা করেছি। ধন্যবাদ!
ডুডম্যান3000

53

আপনি টিম সিস্টেম পরীক্ষা বা নুনিট ব্যবহার করছেন না কেন , সর্বোত্তম অনুশীলন হ'ল আপনার পরীক্ষাগুলির জন্য একটি পৃথক ক্লাস লাইব্রেরি তৈরি করা। আপনার পরীক্ষার প্রকল্পে কেবল একটি অ্যাপকনফিগ যুক্ত করা আপনি সংকলন করলে স্বয়ংক্রিয়ভাবে আপনার বিন ফোল্ডারে অনুলিপি করা হবে

যদি আপনার কোডটি নির্দিষ্ট কনফিগারেশন পরীক্ষার উপর নির্ভরশীল হয়, তবে আমি প্রথম পরীক্ষার মাধ্যমে যাচাই করি যে কনফিগারেশন ফাইলটি উপলব্ধ ( যাতে আমি জানি যে আমি পাগল নই ):

<configuration>
   <appSettings>
       <add key="TestValue" value="true" />
   </appSettings>
</configuration>

এবং পরীক্ষা:

[TestFixture]
public class GeneralFixture
{
     [Test]
     public void VerifyAppDomainHasConfigurationSettings()
     {
          string value = ConfigurationManager.AppSettings["TestValue"];
          Assert.IsFalse(String.IsNullOrEmpty(value), "No App.Config found.");
     }
}

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

public class MyObject
{
     public void Configure(MyConfigurationObject config)
     {
          _enabled = config.Enabled;
     }

     public string Foo()
     {
         if (_enabled)
         {
             return "foo!";
         }
         return String.Empty;
     }

     private bool _enabled;
}

[TestFixture]
public class MyObjectTestFixture
{
     [Test]
     public void CanInitializeWithProperConfig()
     {
         MyConfigurationObject config = new MyConfigurationObject();
         config.Enabled = true;

         MyObject myObj = new MyObject();
         myObj.Configure(config);

         Assert.AreEqual("foo!", myObj.Foo());
     }
}

2
আমি এখানে কনফিগারেশন নির্ভরতা পাস করার চেতনার সাথে একমত, এই উত্তর দেওয়া হয়েছে বলে মনে হয়, মার্ক সিমেন কম কম! এখানে শেষ: .কনফিগ ফাইলটি হারিয়ে যাওয়ার কারণে ইউনিট পরীক্ষায় ব্যর্থ হওয়া
শান

একটি "লাইনটি থেকে নিখোঁজ রয়েছে: স্ট্রিং মান = কনফিগারেশন ম্যানেজ.অ্যাপসেটেটিংস" "টেস্টওয়ালু]; আমি এটি সংশোধন করার চেষ্টা করেছি, তবে আমাকে সম্পাদনা করার অনুমতি দেওয়ার জন্য স্ট্যাকওভারফ্লো পেতে ফিক্স করার জন্য আরও 5 টি অক্ষর খুঁজে বের করতে হবে।
জেন

22

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

এটির সমাধানের একটি উপায় হ'ল ওয়েবকনফিগটিকে অনুলিপি করে প্রজেক্টটি পরীক্ষা করতে এবং এটিকে অ্যাপকনফিগ হিসাবে নতুন নামকরণ করা।

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

copy "$(SolutionDir)\WebApplication1\web.config" "$(ProjectDir)$(OutDir)$(TargetFileName).config"

এবং ঠিক আছে ক্লিক করুন। (নোট করুন যা আপনার পরীক্ষার নাম হিসাবে প্রজেক্টের নাম হিসাবে আপনার সম্ভবত সম্ভবত ওয়েব অ্যাপ্লিকেশন 1 পরিবর্তন করা প্রয়োজন) আপনার যদি ওয়েবকনফিগের ভুল পথ থাকে তবে অনুলিপি ব্যর্থ হয় এবং আপনি এটি ব্যর্থ হওয়ার সময় লক্ষ্য করবেন।

সম্পাদনা:

বর্তমান প্রকল্প থেকে পরীক্ষা প্রকল্পে অনুলিপি করতে:

copy "$(ProjectDir)bin\WebProject.dll.config" "$(SolutionDir)WebProject.Tests\bin\Debug\App.Config"

সত্যিই দুর্দান্ত সমাধান। এটি আমাকে .configফাইলগুলি অনুলিপি করা এবং অনুলিপি করা এড়াতে সহায়তা করেছে । ভাগ করে নেওয়ার জন্য ধন্যবাদ! :)
লেনিয়েল ম্যাককাফেরি

খুব সুন্দর সমাধান! অনেক ধন্যবাদ.
ভিন শাহার্ডার

দুর্দান্ত সমাধান, তবে কী ঘটবে যখন web.configমূলটিতে .configএকই প্রকল্পের মধ্যে কেবল বাহ্যিক ফাইলগুলির উল্লেখ থাকে । যেহেতু পাথ কেবল একই ডিরেক্টরিতে ফোল্ডারগুলিতে নির্দেশ করতে পারে (যা সাধারণভাবে সত্য), পরীক্ষা চালানোর সময়, এটি বাহ্যিক ফাইলগুলি পরিচালনা করতে সক্ষম হবে না। কোন সমাধান কীভাবে সমাধান করবেন?
সুগফ্রি

এটি আমার জন্য কাজ করেছে: "S (সলিউশনডির) \ মেইনপ্রজেক্ট \ ওয়েবকনফিগ" "Project (প্রজেক্টডির) app.config"
অ্যান্ড্রু

8

এটি কিছুটা পুরানো তবে আমি এর জন্য আরও ভাল সমাধান খুঁজে পেয়েছি। আমি এখানে বাছাইকৃত উত্তরটি চেষ্টা করছিলাম তবে মনে হচ্ছে .testrunconfig ইতিমধ্যে অপ্রচলিত।

1. ইউনিট টেস্টের জন্য, কনফিগারটি মোড়ানো একটি ইন্টারফেস (আইকনফিগ)

ইউনিট পরীক্ষাগুলির জন্য, কনফিগারেশন সত্যই আপনার টেস্টিংয়ের ফলে এমন কোনও অংশ হওয়া উচিত নয় যাতে আপনি মজক তৈরি করতে পারেন a এই উদাহরণে আমি মোক ব্যবহার করছিলাম।

Mock<IConfig> _configMock;
_configMock.Setup(config => config.ConfigKey).Returns("ConfigValue");
var SUT = new SUT(_configMock.Object);

2. ইন্টিগ্রেশন পরীক্ষার জন্য, আপনার প্রয়োজনীয় কনফিগারটি গতিশীলভাবে যুক্ত করুন

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if(config.AppSettings.Settings[configName] != null)
{
    config.AppSettings.Settings.Remove(configName);
}
config.AppSettings.Settings.Add(configName, configValue);
config.Save(ConfigurationSaveMode.Modified, true);
ConfigurationManager.RefreshSection("appSettings");

5

এটি খুব সহজ।

  • আপনার পরীক্ষা প্রকল্পে ডান ক্লিক করুন
  • যোগ করুন -> বিদ্যমান আইটেম
  • অ্যাড বোতামের ঠিক পাশে আপনি একটি ছোট তীর দেখতে পাবেন
  • কনফিগারেশন ফাইল নির্বাচন করুন "লিঙ্ক হিসাবে যুক্ত করুন" এ ক্লিক করুন

4

আপনি যদি নুনিট ব্যবহার করছেন তবে এই পোস্টটি একবার দেখুন । মূলত আপনাকে আপনার .nunit ফাইলের মতো একই ডিরেক্টরিতে আপনার app.config থাকা দরকার।


আমি আমার ইউনিট পরীক্ষার জন্য ভিএস08 টিম সিস্টেম ব্যবহার করছি তবে নুনিট টিপটির জন্য ধন্যবাদ!
জর্দান পারমার 15

2

যদি আপনি অ্যাপ্লিকেশনটি Asp.net কানেকশনস্ট্রিংয়ের মতো সেটিং ব্যবহার করছেন তবে আপনাকে আপনার পদ্ধতিতে হোস্টটাইপ বৈশিষ্ট্যটি যুক্ত করতে হবে, অন্যথায় আপনার কাছে অ্যাপ.কনফিগ ফাইল থাকলেও তারা লোড করতে পারবে না।

[TestMethod]
[HostType("ASP.NET")] // will load the ConnectionString from the App.Config file
public void Test() {

}

0

আমি নুনিট ব্যবহার করি এবং আমার প্রকল্প ডিরেক্টরিতে আমার অ্যাপ্লিকেশনটির একটি অনুলিপি রয়েছে ig আপনার এটি পরীক্ষিত প্রকল্পের একই ডিরেক্টরিতে থাকা দরকার এবং আপনি ভাল থাকবেন।


0

আমি এই নুনিটি 2.5.10 এর সাথে কাজ করার জন্য কোনও পরামর্শ পেতে পারি নি তাই আমি নুনির প্রকল্প -> টার্গেটের জন্য কনফিগার ফাইলটি নির্দিষ্ট করতে কার্যকারিতা সম্পাদনা করে শেষ করেছি (অন্যরা যেমন বলেছে এটির মতো একই ফোল্ডারে থাকা দরকার। নুনিট ফাইল নিজেই)। এর ইতিবাচক দিকটি হ'ল আমি কনফিগার ফাইলটিকে একটি টেস্টকনফিগ নাম দিতে পারি যা এটি কী এবং এটি কেন তা আরও পরিষ্কার করে তোলে)


0

আপনার ইউনিট পরীক্ষাগুলি এমন একটি পরিবেশ হিসাবে বিবেচিত যা এটি পরীক্ষা করার জন্য আপনার কোড চালায়। অন্য যে কোনও সাধারণ পরিবেশের মতোই আপনারও রয়েছে মঞ্চনাটক / উত্পাদন। .configআপনার পরীক্ষা প্রকল্পের জন্য আপনাকে একটি ফাইলও যুক্ত করতে হতে পারে । একটি কর্মশালা হ'ল একটি শ্রেণিবদ্ধ গ্রন্থাগার তৈরি করা এবং NUnit এবং NUnit অ্যাডাপ্টারের মতো প্রয়োজনীয় নুগেট প্যাকেজ যুক্ত করে এটি টেস্ট প্রকল্পে রূপান্তর করা। এটি ভিজ্যুয়াল স্টুডিও টেস্ট রানার এবং পুনরায় ভাগকারী উভয়ের সাথে পুরোপুরি সূক্ষ্মভাবে কাজ করে app.configএবং আপনার পরীক্ষা প্রকল্পে আপনার ফাইল রয়েছে। এখানে চিত্র বর্ণনা লিখুন

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

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

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

এবং পরিশেষে এ থেকে আমার পরীক্ষা এবং মানটি ডিবাগ করে App.config:

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

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