সমস্ত পরীক্ষা চালানোর আগে কি একবার কোড কার্যকর করা সম্ভব?


112

মূলত আমি এমএসটিস্টকে বলতে চাই যে ধারাবাহিকভাবে টেস্ট রানের সূচনা করার আগে কিছুটা কোড প্রয়োগ করতে হবে, মূলত আমি যা করতে চাই তা হ'ল কিছু কোড স্টিক করার মতোই Main()

যে কারণটি আমি এটি করতে চাই তা হ'ল আমি আমার ইন্টিগ্রেশন পরীক্ষার সময় লগ 4 নেট দিয়ে কিছু লগিং করতে চাই। আমি কেবল log4net.Config.XmlConfiguratorসমাবেশ বৈশিষ্ট্যটি ব্যবহার করতে পারি না যেহেতু এটি আমার পরীক্ষামূলক সমাবেশে এটি পড়ার সময় থেকেই এটি ইতিমধ্যে ডেকেছে LoggerManager। ডকুমেন্টেশনটি কোড এন্ট্রি পয়েন্টে স্পষ্টভাবে লগ 4 নেট কনফিগার করার পরামর্শ দেয় - তবে এটি আমার পরীক্ষাগুলিতে কোথায়?

আমার টেস্টড্রাইভন.এনইটি এবং এমএসটিস্ট রানারতে আমার পরীক্ষা চালাতে সক্ষম হওয়া দরকার।

উত্তর:


153

এফডাব্লুআইডাব্লু, আপনি কোনও সমাবেশে সমস্ত ইউনিট পরীক্ষা চালানোর আগে কোড চালানোর জন্য অ্যাসেম্বলিআইনাইটালাইজ বৈশিষ্ট্যটি ব্যবহার করতে পারেন :

[TestClass]
public class SetupAssemblyInitializer
{
    [AssemblyInitialize]
    public static void AssemblyInit(TestContext context)
    {
        // Initalization code goes here
    }
}

আপনার যদি একাধিক ইউনিট পরীক্ষার সমাবেশ হয় তবে আমি একাধিক সমাবেশকে ঘিরে এমন কিছু সম্পর্কে অবগত নই।

আমি যতদূর সচেতন, এটি আপনি যতটা মেইন সমতুল্য হিসাবে পেতে পারেন তত কাছাকাছি।

নোট করুন যে AssemblyInitialize-ডেকোর্টেড পদ্ধতিটি অবশ্যই একটি অবশ্যই-TestClass শ্রেণিবদ্ধ শ্রেণিতে থাকতে হবে যাতে কমপক্ষে একটি- TestMethodবর্ণিত পদ্ধতি রয়েছে, অন্যথায় এটি কার্যকর করা হবে না !


1
আমার একই সমস্যা ছিল (কেবলমাত্র এমএসটিস্টের জন্য) এবং ভাল কাজ করেছি। ধন্যবাদ :)
অস্কার ফোলি

1
এমএসএস্টেস্ট এবং টেস্টড্রাইভেন.এনইটি উভয়ের কাছ থেকে এটির কাজ করার বিষয়ে যে কারও সমস্যা রয়েছে, আপনি ক্লাসটিনিটায়ালাইজে কোডটি চালাবেন কিনা তা নির্ধারণ করতে একটি স্ট্যাটিক পতাকা ব্যবহার করতে পারেন (এটি এমএসটিস্টে কাজ করে না)।
কার্ল

7
দ্রষ্টব্য: পরীক্ষার ইঞ্জিনটি এমন একটি পদ্ধতি চালায় যা এসেম্বলিআইনাইটালাইজ বৈশিষ্ট্যের সাথে চিহ্নিত হয় কেবল যদি সেই পদ্ধতিটি এমন কোনও শ্রেণীর সদস্য থাকে যা টেস্টক্লাস বৈশিষ্ট্যের সাথে চিহ্নিত থাকে।
জোয়েন

5
@ জোয়েন: টেস্ট ইঞ্জিন এমন একটি পদ্ধতি চালায় যা এসেম্বলিআইনাইটালাইজ অ্যাট্রিবিউটকে চিহ্নিত করা হয় কেবল যদি সেই পদ্ধতিটি কোনও টেস্টক্লাস অ্যাট্রিবিউটের সাথে চিহ্নিত শ্রেণীর সদস্য হয় and contains methods that are marked with the TestMethod attribute
oɔɯǝɹ

3
এসেম্বলিআইনিটিয়ালাইজ সহ চিহ্নিত পদ্ধতিটি ভিজ্যুয়াল স্টুডিও 2015 চূড়ান্তভাবে চলবে অন্য পদ্ধতি ছাড়া টেস্টমেথড বৈশিষ্ট্যগুলি চিহ্নিত নয়।
ক্রিস

63

সমাপ্তির জন্য, এইগুলি এমএসটিস্টের জন্য "পূর্বে রান কোড" বিকল্পগুলি:

  • [AssemblyInitialize]যে সমাবেশে কোনও পরীক্ষা চলার আগে, একবার বিধানসভায় কোড চালানোর জন্য ব্যবহার করুন ।
  • [ClassInitialize]ক্লাসে পদ্ধতি পরীক্ষা করা হয়েছে এমন কোনও পরীক্ষার আগে, প্রতি ক্লাসে একবার কোড চালানোর জন্য ব্যবহার করুন ।
  • [TestInitialize]ক্লাসে যেখানে পদ্ধতিটি সংজ্ঞায়িত হয়েছে সেখানে প্রতিটি পরীক্ষার আগে কোড চালানোর জন্য ব্যবহার করুন ।

12
টিয়ার-ডাউন ক্রিয়াকলাপগুলির জন্য ক্লিনআপ প্রত্যয় (যেমন ক্লাসিক্লিনআপ)
ইয়ায়ার নেভেট

13

আমি এটি এমএস টেস্ট শিরোনামে দেখতে পাচ্ছি।

// Use ClassInitialize to run code before running the first test in the class
//[ClassInitialize()]
//public static void MyClassInitialize(TestContext testContext) { }

এটি এক ক্লাসে পরীক্ষার আগে চলবে।

আপনার মতামতগুলি সমস্ত পরীক্ষার আগে কিছু চালাতে চান।

পরীক্ষা রান কনফিগারেশনে সেটআপ স্ক্রিপ্ট অপশনও রয়েছে।


যতক্ষণ না আমি কিছু মিস করছি, সেটআপ স্ক্রিপ্টগুলি অ্যাপডোমাইন পরীক্ষায় চলমান কোডটিতে সহায়তা করবে না।
জর্জ মাউয়ার

2
এটা সম্ভবত আমি. আপনি যখন "টেস্টে অ্যাপডোমেনের চলমান কোড" বলবেন তখন আমি নিশ্চিত নই। আমি আপনার প্রশ্নটি পরীক্ষার একটি সিরিজের আগে কোড সম্পাদন করতে চাইছে হিসাবে এটি পড়েছি, যদি এটি অন্যরকম কিছু ছিল। "পরীক্ষা চালানোর আগে এবং পরে সেটআপ স্ক্রিপ্টস এবং ক্লিনআপ স্ক্রিপ্টগুলি সঞ্চালিত হয়, সেই পরীক্ষার রানগুলিতে যে ধরণের পরীক্ষা রয়েছে তা নির্বিশেষে।" msdn.microsoft.com/en-us/library/ms182480%28VS.80%29.aspx
Maestro1024
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.