এমএসটিস্টের কি ইউনাইটের টেস্টকেসের সমতুল্য রয়েছে?


107

আমি TestCaseপ্রতিটি পরীক্ষার জন্য পৃথক পদ্ধতির প্রয়োজন ছাড়াই পরীক্ষার প্যারামিটারগুলি নির্দিষ্ট করার দ্রুত উপায় হিসাবে NUnit এ বৈশিষ্ট্যটি বেশ দরকারী বলে মনে করি। এমএসটিস্টেও কি তেমন কিছু আছে?

 [TestFixture]  
 public class StringFormatUtilsTest  
 {  
     [TestCase("tttt", "")]  
     [TestCase("", "")]  
     [TestCase("t3a4b5", "345")]  
     [TestCase("3&5*", "35")]  
     [TestCase("123", "123")]  
     public void StripNonNumeric(string before, string expected)  
     {  
         string actual = FormatUtils.StripNonNumeric(before);  
         Assert.AreEqual(expected, actual);  
     }  
 }  

একই প্রশ্ন দেখতে পাবেন stackoverflow.com/questions/347535/how-to-rowtest-with-mstest/...
মাইকেল Freidgeim

আপনি নুনিট ব্যবহার করবেন না কেন?
মাইক ডি ক্লার্ক

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

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

1
চেষ্টা করুন DataRow(), দেখুন: ব্লগস.এমএসডন.মাইক্রোসফট.ডিভপস
বাবাক

উত্তর:


62

মাইক্রোসফট সম্প্রতি "এমএসটিস্ট ভি 2" ঘোষণা করেছে ( ব্লগ-নিবন্ধ দেখুন )। এটি আপনাকে ধারাবাহিকভাবে (ডেস্কটপ, ইউডাব্লুপি, ...) DataRow-ট্রিবিউট ব্যবহার করতে দেয়!

 [TestClass]  
 public class StringFormatUtilsTest  
 {  
     [DataTestMethod]  
     [DataRow("tttt", "")]  
     [DataRow("", "")]  
     [DataRow("t3a4b5", "345")]  
     [DataRow("3&5*", "35")]  
     [DataRow("123", "123")]  
     public void StripNonNumeric(string before, string expected)  
     {  
         string actual = FormatUtils.StripNonNumeric(before);  
         Assert.AreEqual(expected, actual);  
     }  
 } 

আবার, ভিজ্যুয়াল স্টুডিও এক্সপ্রেস টেস্ট এক্সপ্লোরার দুর্ভাগ্যক্রমে এই পরীক্ষাগুলি স্বীকৃতি দেয় না। তবে কমপক্ষে "পূর্ণ" ভিএস সংস্করণগুলি এখন সেই বৈশিষ্ট্যটিকে সমর্থন করে!

এটি ব্যবহারের জন্য, কেবল নিউগেট প্যাকেজগুলি এমএসটিস্ট.টেষ্টফ্রেমওয়ার্ক এবং এমএসটিস্ট.টেষ্টএডাপ্টার ইনস্টল করুন (উভয়ই এখনই প্রাক-প্রকাশ)।

পুরানো উত্তর:

যদি এমএসটিস্টের সাথে তাল মিলিয়ে চলতে না হয় এবং আপনি কেবল এটি টেস্ট এক্সপ্লোরারের মাধ্যমে পরীক্ষা চালাতে সক্ষম হওয়ার জন্য ব্যবহার করছেন কারণ আপনার কাছে কেবল একটি ভিজ্যুয়াল স্টুডিও এক্সপ্রেস সংস্করণ রয়েছে, তাহলে এটি আপনার পক্ষে সমাধান হতে পারে:

আছে VsTestAdapter VSIX এক্সটেনশন টেস্ট এক্সপ্লোরার মাধ্যমে NUnit পরীক্ষা চালাতে পারছে না জন্য। দুর্ভাগ্যক্রমে, ভিএস এক্সপ্রেস ব্যবহারকারীগণ এক্সটেনশানগুলি ইনস্টল করতে পারবেন না ... তবে ভাগ্যক্রমে VsTestAdapter এছাড়াও একটি সরল নুগেট-প্যাকেজ নিয়ে আসে !

সুতরাং, আপনি যদি কোনও ভিএস এক্সপ্রেস ব্যবহারকারী হন তবে কেবলমাত্র ভ্যাসেস্টএডাপ্টার নুগেট-প্যাকেজ ইনস্টল করুন এবং টেস্ট এক্সপ্লোরারটির মাধ্যমে আপনার NUnit পরীক্ষা / টেস্টকেসগুলি চালানো উপভোগ করুন!


দুর্ভাগ্যক্রমে পূর্বোক্ত বিবৃতিটি সত্য নয়। এক্সপ্রেস সংস্করণের মাধ্যমে প্যাকেজটি ইনস্টল করা পুরোপুরি সম্ভব হলেও এটি অকেজো, যেহেতু এটি টেস্ট এক্সপ্লোরার ব্যবহার করতে পারে না। টেস্টএডাপ্টারের পুরানো সংস্করণে এর আগে একটি পার্শ্ব নোট ছিল, এটি 2.0.0 এর বর্ণন পৃষ্ঠা থেকে সরানো হয়েছে :

মনে রাখবেন এটি ভিএস এক্সপ্রেসের সাথে কাজ করে না


4
ভিএস 2017 ব্যবহার করার সময় এমস্টেস্ট "ভি 2" এখন ডিফল্ট কাঠামো।
মার্ক এল।

34

আমি জানি এটি একটি দেরিতে উত্তর তবে আশা করি এটি অন্যকে সাহায্য করবে।

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

https://github.com/Thwaitesy/MSTestHacks

1) নিউগেট প্যাকেজ ইনস্টল করুন ।

2) টেস্টবেস থেকে আপনার পরীক্ষার ক্লাস উত্তীর্ণ করুন

public class UnitTest1 : TestBase
{ }

3) একটি সম্পত্তি, ক্ষেত্র বা পদ্ধতি তৈরি করুন, যা প্রত্যাশিত ফেরত দেয়

[TestClass]
public class UnitTest1 : TestBase
{
    private IEnumerable<int> Stuff
    {
        get
        {
            //This could do anything, get a dynamic list from anywhere....
            return new List<int> { 1, 2, 3 };
        }
    }
}

4) উপরে পরীক্ষা করা নামের দিকে ইঙ্গিত করে আপনার পরীক্ষা পদ্ধতিতে এমএসটিস্ট ডেটাসোর্স বৈশিষ্ট্য যুক্ত করুন। এটি পুরোপুরি যোগ্যতা অর্জন করা প্রয়োজন।

[TestMethod]
[DataSource("Namespace.UnitTest1.Stuff")]
public void TestMethod1()
{
    var number = this.TestContext.GetRuntimeDataSourceObject<int>();

    Assert.IsNotNull(number);
}

শেষ ফলাফল: 3 টি পুনরাবৃত্তি ঠিক সাধারণ ডাটাসোর্সের মতো :)

using Microsoft.VisualStudio.TestTools.UnitTesting;
using MSTestHacks;

namespace Namespace
{
    [TestClass]
    public class UnitTest1 : TestBase
    {
        private IEnumerable<int> Stuff
        {
            get
            {
                //This could do anything, get a dynamic list from anywhere....
                return new List<int> { 1, 2, 3 };
            }
        }

        [TestMethod]
        [DataSource("Namespace.UnitTest1.Stuff")]
        public void TestMethod1()
        {
            var number = this.TestContext.GetRuntimeDataSourceObject<int>();

            Assert.IsNotNull(number);
        }
    }
}

এটিও প্রতিটি ক্ষেত্রে একাধিক পরামিতিগুলির সাথে কাজ করবে?
লোনফিশ

অন্তর্নিহিত লাইব্রেরিতে কোনও পরিবর্তন ছিল বলে এটি এমএসটিস্ট "ভি 2" এর সাথে কাজ করে না । এটি ভিএস 15 (ভিএস 2017) এর জন্য ডিফল্ট।
মার্ক এল।

3
হ্যাঁ, আপনি যদি এমএসটিস্ট ভি 2 ব্যবহার করছেন তবে এমন একটি নতুন পরীক্ষার কেস সরবরাহকারী রয়েছে যা নুনিটের মতো। সুতরাং এই কাজের জন্য আর দরকার নেই Th
থোয়েটসি

এটি VS 2015-এ কাজ করছে বলে মনে হচ্ছে না, অ্যাপ্লিকেশন কনফিগারেশন ফাইলটি গতিশীলরূপে পপুলেশন করে না এবং এভাবে ডেটাসোর্সগুলি খুঁজে পাওয়া যায় না
রিড

13

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

উদাহরণস্বরূপ, বলুন আপনার কাছে এর মতো একটি এক্সটেনশন পদ্ধতি রয়েছে:

public static class Extensions
{
    /// <summary>
    /// Get the Qtr with optional offset to add or subtract quarters
    /// </summary>
    public static int GetQuarterNumber(this DateTime parmDate, int offset = 0)
    {
        return (int)Math.Ceiling(parmDate.AddMonths(offset * 3).Month / 3m);
    }
}

আপনি এই জাতীয় একটি পরীক্ষার জন্য লিনকিউতে একত্র হয়ে বেনামে প্রকারের অ্যারে ব্যবহার করতে পারেন:

[TestMethod]
public void MonthReturnsProperQuarterWithOffset()
{
    // Arrange
    var values = new[] {
        new { inputDate = new DateTime(2013, 1, 1), offset = 1, expectedQuarter = 2},
        new { inputDate = new DateTime(2013, 1, 1), offset = -1, expectedQuarter = 4},
        new { inputDate = new DateTime(2013, 4, 1), offset = 1, expectedQuarter = 3},
        new { inputDate = new DateTime(2013, 4, 1), offset = -1, expectedQuarter = 1},
        new { inputDate = new DateTime(2013, 7, 1), offset = 1, expectedQuarter = 4},
        new { inputDate = new DateTime(2013, 7, 1), offset = -1, expectedQuarter = 2},
        new { inputDate = new DateTime(2013, 10, 1), offset = 1, expectedQuarter = 1},
        new { inputDate = new DateTime(2013, 10, 1), offset = -1, expectedQuarter = 3}
        // Could add as many rows as you want, or extract to a private method that
        // builds the array of data
    }; 
    values.ToList().ForEach(val => 
    { 
        // Act 
        int actualQuarter = val.inputDate.GetQuarterNumber(val.offset); 
        // Assert 
        Assert.AreEqual(val.expectedQuarter, actualQuarter, 
            "Failed for inputDate={0}, offset={1} and expectedQuarter={2}.", val.inputDate, val.offset, val.expectedQuarter); 
        }); 
    }
}

এই কৌশলটি ব্যবহার করার সময় এটি কোনও ফর্ম্যাট বার্তা ব্যবহার করা সহায়ক যা এতে সারিটিতে ইনপুট ডেটা অন্তর্ভুক্ত করে তা সনাক্ত করতে আপনাকে সহায়তা করে যাতে কোন সারিতে পরীক্ষায় ব্যর্থ হওয়ার কারণ ঘটেছে।

আমি AgileCoder.net এ আরও পটভূমি এবং বিশদ সহ এই সমাধানটি সম্পর্কে ব্লগ করেছি ।


4
এর সাথে সবচেয়ে বড় সমস্যাটি হ'ল কোনও ক্ষেত্রে যদি মানগুলির অ্যারে থেকে ব্যর্থ হয় - পুরো পরীক্ষা ব্যর্থ হয় এবং আর কোনও মামলা পরীক্ষা করা হয় না।
ইতোলেদানো

এটি পরস্পরকে প্রভাবিত করতে পারে এমন পরীক্ষার কেস তৈরি করে।
বার্তোসকেপিপি

@ বার্টোসকেপি কেবলমাত্র যদি পরীক্ষার অধীনে থাকা সিস্টেমটির পার্শ্ব প্রতিক্রিয়া থাকে তবে এই ক্ষেত্রে সম্ভবত এটি সর্বোত্তম কৌশল নয়।
গ্যারি.রে

@ Gary.Ray এছাড়াও যখন সিস্টেমে এখনও পার্শ্ব প্রতিক্রিয়া নেই । এছাড়াও যখন কোনও পরীক্ষা পাস হয় না এবং অন্য বিকাশকারী এটি ঠিক করার চেষ্টা করে এবং নির্ভরতাটি গুরুত্বপূর্ণ কি না তা নির্ধারণের চেষ্টা করার সময়গুলি অপচয় করে। এটি কেবল এমন কিছু যা আপনার কখনও করা উচিত নয়, পিরিয়ড।
বার্তোসকেপিপি

যথেষ্ট. +1
ট্রে ম্যাক

7

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

আমি সমাধানটি এখানে অনুলিপি করবো:

[TestClass]  
 public class StringFormatUtilsTest  
 {  
     [TestMethod]  
     [DataRow("tttt", "")]  
     [DataRow("", "")]  
     [DataRow("t3a4b5", "345")]  
     [DataRow("3&amp;amp;5*", "35")]  
     [DataRow("123", "123")]  
     public void StripNonNumeric(string before, string expected)  
     {  
         string actual = FormatUtils.StripNonNumeric(before);  
         Assert.AreEqual(expected, actual);  
     }  
 } 

এটি ব্যবহারের জন্য, কেবল নিউগেট প্যাকেজগুলি এমএসটিস্ট.টেষ্টফ্রেমওয়ার্ক এবং এমএসটিস্ট.টেষ্টএডাপ্টার ইনস্টল করুন ।

একটি সমস্যা হচ্ছে

ত্রুটি CS0433 টাইপ 'টেস্টক্লাসআট্রিবিউট' উভয়ই রয়েছে 'মাইক্রোসফ্ট.ভিজুয়ালস্টুডিও.কুয়েলটিস্টুলস.উনিটটেষ্টফ্রেমওয়ার্ক, সংস্করণ = 10.0.0.0 এবং' মাইক্রোসফ্ট.ভিজুয়ালস্টুডিও.টেষ্টপ্লেটফর্ম.টেষ্টফ্রেমওয়ার্ক, সংস্করণ = 14.0.0.0

সুতরাং, দয়া করে প্রকল্পের উল্লেখগুলি থেকে মাইক্রোসফ্ট.ভিউজুয়ালস্টুডিও.কুয়েলটিসুলস.উনাইটটেষ্টফ্রেমওয়ার্কটি সরান ।

আসল জবাবটি সম্পাদনা করতে এবং এটি মুছে ফেলার জন্য আপনাকে খুব স্বাগত জানাই।


0

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

https://msdn.microsoft.com/en-us/library/ms182527.aspx?f=255&MSPPError=-2147217396 ডাটাবেস ইনপুট উপর ভিত্তি করে একটি সম্পূর্ণ টিউটোরিয়াল আছে।

http://www.rhyous.com/2015/05/11/row-tests-or-paramerterized-tests-mstest-xML/ এর এক্সএমএল ফাইল ইনপুট ভিত্তিক একটি টিউটোরিয়াল রয়েছে।

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