ক্রমিকভাবে ইউনিট পরীক্ষা চালান (সমান্তরাল না করে)


107

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

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

আমি xUnit.NET ব্যবহার করেছি, এই আশা করে যে এটির এক্সটেনসিবিলিটির কারণে, আমি পরীক্ষাগুলি সিরিয়ালিকভাবে চালাতে বাধ্য করার একটি উপায় খুঁজে পেতে পারি। তবে আমার কোনও ভাগ্য হয়নি। আমি আশা করছি যে এখানে এসও-তে থাকা কেউ একই ধরণের সমস্যার মুখোমুখি হয়েছেন এবং ক্রমিকভাবে চালানোর জন্য ইউনিট পরীক্ষা কীভাবে পাবেন তা জানেন।

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


সার্ভিস হস্টের এই বিশেষ আচরণটি কি আপনি সম্বোধন করতে চাইবেন না?
রবার্ট হার্ভে

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

4
আমার কাছে একই রকম সমস্যা ছিল TestServerডকারে একাধিক চালানোর চেষ্টা করে । সুতরাং আমাকে ইন্টিগ্রেশন টেস্টগুলি সিরিয়াল করতে হয়েছিল।
এইচ-রাই

উত্তর:


128

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

এক্সউনাইটে আপনি এটি অর্জন করতে নিম্নলিখিত পরিবর্তনগুলি করতে পারেন:

নিম্নলিখিতগুলি সমান্তরালে চলবে:

namespace IntegrationTests
{
    public class Class1
    {
        [Fact]
        public void Test1()
        {
            Console.WriteLine("Test1 called");
        }

        [Fact]
        public void Test2()
        {
            Console.WriteLine("Test2 called");
        }
    }

    public class Class2
    {
        [Fact]
        public void Test3()
        {
            Console.WriteLine("Test3 called");
        }

        [Fact]
        public void Test4()
        {
            Console.WriteLine("Test4 called");
        }
    }
}

এটিকে অনুক্রমিক করে তুলতে আপনাকে কেবল উভয় পরীক্ষার ক্লাস একই সংগ্রহের অধীনে রাখা দরকার:

namespace IntegrationTests
{
    [Collection("Sequential")]
    public class Class1
    {
        [Fact]
        public void Test1()
        {
            Console.WriteLine("Test1 called");
        }

        [Fact]
        public void Test2()
        {
            Console.WriteLine("Test2 called");
        }
    }

    [Collection("Sequential")]
    public class Class2
    {
        [Fact]
        public void Test3()
        {
            Console.WriteLine("Test3 called");
        }

        [Fact]
        public void Test4()
        {
            Console.WriteLine("Test4 called");
        }
    }
}

আরও তথ্যের জন্য আপনি এই লিঙ্কটি উল্লেখ করতে পারেন


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

4
এটি করার সঠিক উপায় এটি, রেফ Xunit ডকুমেন্টেশন।
হ্যাকন কে। ওলাফসেন

4
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত কারণ সাধারণত কিছু পরীক্ষা সমান্তরালভাবে চালানো যেতে পারে (আমার ক্ষেত্রে সমস্ত ইউনিট পরীক্ষাগুলি), তবে কিছু সমান্তরালে চালানোর সময় এলোমেলোভাবে ব্যর্থ হয় (আমার ক্ষেত্রে যারা মেমোরি ওয়েব ক্লায়েন্ট / সার্ভার ব্যবহার করে), তাই এক কেউ চাইলে পরীক্ষা চলমান অনুকূল করতে সক্ষম।
আলেক্সি

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

এই উত্তরের জন্য আপনাকে অনেক ধন্যবাদ! আমার বিভিন্ন ক্লাসে স্বীকৃতি টেস্ট হওয়ার কারণে এটি করা দরকার যেগুলি উভয়ই একই টেস্টবেস থেকে উত্তরাধিকারী এবং ইএফ কোরের সাথে একমত হয় না।
Kyanite

108

গুরুত্বপূর্ণ: এই উত্তরটি। নেট ফ্রেমওয়ার্কের জন্য প্রযোজ্য। ডটনেট কোরের জন্য, সম্পর্কিত সম্পর্কে দিমিত্রি এর উত্তর দেখুন xunit.runner.json

সমস্ত ভাল ইউনিট পরীক্ষা 100% বিচ্ছিন্ন হওয়া উচিত। ভাগ করা রাষ্ট্র (যেমন staticপ্রতিটি পরীক্ষার মাধ্যমে সংশোধিত কোনও সংখ্যার উপর নির্ভর করে ) ব্যবহার করা খারাপ অভ্যাস হিসাবে বিবেচিত হয়।

এটি বলার পরে, ক্রমানুসারে xUnit পরীক্ষা চালানো সম্পর্কে আপনার প্রশ্নের উত্তর আছে! আমি ঠিক একই সমস্যার মুখোমুখি হয়েছি কারণ আমার সিস্টেমটি স্ট্যাটিক সার্ভিস লোকেটার ব্যবহার করে (যা আদর্শের চেয়ে কম)।

ডিফল্টরূপে xUnit 2.x সমান্তরালে সমস্ত পরীক্ষা চালায়। CollectionBehaviorআপনার পরীক্ষার প্রকল্পে আপনার এসেম্বলিআইএনফো -সি-কে সংজ্ঞায়িত করে প্রতি-সমাবেশে এটি সংশোধন করা যেতে পারে ।

প্রতি-সমাবেশ পৃথকীকরণের জন্য:

using Xunit;
[assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)]

বা কোনও ব্যবহারে সমান্তরালতার জন্য:

[assembly: CollectionBehavior(DisableTestParallelization = true)]

পরেরটি সম্ভবত আপনি চান। সমান্তরালতা এবং কনফিগারেশন সম্পর্কে আরও তথ্য xUnit ডকুমেন্টেশনে পাওয়া যাবে ।


4
আমার জন্য, প্রতিটি শ্রেণীর মধ্যে পদ্ধতির মধ্যে ভাগ করা সংস্থান ছিল। এক ক্লাস থেকে একটি পরীক্ষা চালানো, তারপরে অন্য একটি থেকে উভয়ই পরীক্ষা ভঙ্গ করত। আমি ব্যবহার করে সমাধান করতে সক্ষম হয়েছিল [assembly: CollectionBehavior(CollectionBehavior.CollectionPerClass, DisableTestParallelization = true)]। আপনাকে ধন্যবাদ, স্পুইগল, আমি আমার সমস্ত পরীক্ষা চালাতে এবং একটি কফি নিতে যেতে পারি! :)
Alielson Piffer

4
অভিনব সাক্সেনার উত্তর .NET কোরের জন্য আরও দানাদার।
ইয়েনেনিফার

74

.NET কোর প্রকল্পগুলির জন্য, এর সাথে তৈরি করুন xunit.runner.json:

{
  "parallelizeAssembly": false,
  "parallelizeTestCollections": false
}

এছাড়াও, আপনার csprojথাকা উচিত

<ItemGroup>
  <None Update="xunit.runner.json"> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>

পুরানো। নেট কোর প্রকল্পগুলির জন্য, আপনার project.jsonথাকা উচিত

"buildOptions": {
  "copyToOutput": {
    "include": [ "xunit.runner.json" ]
  }
}

4
আমি ধরে নিলাম সর্বশেষ csproj ডটনেট কোর সমতুল্য <ItemGroup><None Include="xunit.runner.json" CopyToOutputDirectory="Always" /></ItemGroup>বা অনুরূপ হবে?
স্কুইগল

4
এটি সিএসপিজেজে আমার জন্য কাজ করেছে:<ItemGroup> <None Update="xunit.runner.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup>
স্কাইনিার্ড

XUnit তত্ত্বগুলির সাথে সমান্তরালকরণকে অক্ষম করা কি কাজ করে?
জন জাবরোস্কি

এটিই আমার পক্ষে কাজ করেছে, আমি দৌড়ানোর চেষ্টা করেছি dotnet test --no-build -c Release -- xunit.parallelizeTestCollections=falseকিন্তু এটি আমার পক্ষে কার্যকর হয়নি।
হার্ভজার

18

। নেট কোর প্রকল্পগুলির জন্য, আপনি https://xunit.github.io/docs/configuring-with-json.htmlxunit.runner.json এ নথিভুক্ত হিসাবে একটি ফাইলের সাথে xUnit কনফিগার করতে পারেন ।

সমান্তরাল পরীক্ষার সম্পাদন বন্ধ করার জন্য আপনার যে সেটিংটি পরিবর্তন করতে হবে তা হ'ল parallelizeTestCollections, এটি ডিফল্ট true:

trueযদি বিধানসভা একে অপরের বিরুদ্ধে সমান্তরালভাবে এই সমাবেশের ভিতরে পরীক্ষা চালাতে রাজি থাকে তবে এটি সেট করুন । ... falseএই পরীক্ষার সমাবেশের মধ্যে সমস্ত সমান্তরাল অক্ষম করতে এটি সেট করুন ।

JSON স্কিমা প্রকার: বুলিয়ান
ডিফল্ট মান:true

সুতরাং xunit.runner.jsonএই উদ্দেশ্যে একটি ন্যূনতম মত দেখাচ্ছে

{
    "parallelizeTestCollections": false
}

দস্তাবেজে উল্লিখিত হিসাবে, এই বিল্ডটি আপনার বিল্ডে অন্তর্ভুক্ত করতে ভুলবেন না হয়:

  • সেট আউটপুট ডিরেক্টরি অনুলিপি করা কপি নতুন কোনো ফাইলের মধ্যে প্রোপার্টি ভিসুয়াল স্টুডিও, অথবা
  • যুক্ত হচ্ছে

    <Content Include=".\xunit.runner.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    

    আপনার .csprojফাইল, বা

  • যুক্ত হচ্ছে

    "buildOptions": {
      "copyToOutput": {
        "include": [ "xunit.runner.json" ]
      }
    }
    

    আপনার project.jsonফাইল

আপনার প্রকল্পের ধরণের উপর নির্ভর করে।

শেষ পর্যন্ত উপরের পাশাপাশি , আপনি যদি ভিজ্যুয়াল স্টুডিও ব্যবহার করছেন তবে নিশ্চিত হয়ে নিন যে আপনি দুর্ঘটনাক্রমে প্যারালাল বোতামে রান টেস্টগুলি ক্লিক করেননি , যা আপনাকে সমান্তরালে বন্ধ করে দিলেও পরীক্ষাগুলি সমান্তরালে চালিত করবে xunit.runner.json। মাইক্রোসফ্টের ইউআই ডিজাইনাররা চালাকি করে এই বোতামটি লেবেলবিহীন, লক্ষ্য করা শক্ত এবং টেস্ট এক্সপ্লোরারের "রান অল" বোতামটি থেকে প্রায় এক সেন্টিমিটার দূরে রেখেছেন , কেবল আপনি ভুলক্রমে আঘাত হানার সম্ভাবনাটি সীমাবদ্ধ করার জন্য এবং কেন আপনার পরীক্ষাগুলি সম্পর্কে কোনও ধারণা নেই হঠাৎ ব্যর্থ হচ্ছে:

স্ক্রিনশটটি বোতামের সাথে প্রদত্ত


@ জনজাব্রোস্কি আমি আপনার প্রস্তাবিত সম্পাদনাটি বুঝতে পারি না । রিশার্পারের কোনও কিছুর সাথে কী সম্পর্ক আছে? আমি মনে করি উপরের উত্তরটি লেখার সময় আমি সম্ভবত এটি ইনস্টল করেছি, তবে আপনি এখানে ব্যবহার করছেন বা না ব্যবহার করছেন কিনা সেখানকার সবকিছুই এখানে স্বাধীন নয়? সম্পাদনাটিতে আপনি যে পৃষ্ঠায় লিঙ্ক করেছেন তার কোনও xunit.runner.jsonফাইল নির্দিষ্ট করার সাথে কী আছে ? এবং নির্দিষ্ট করে xunit.runner.jsonপরীক্ষা-নিরীক্ষা চালিয়ে যাওয়ার সাথে কোনটির কী সম্পর্ক রয়েছে?
মার্ক এমেরি

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

10

এটি পুরানো প্রশ্ন তবে আমি আমার মতো নতুনদের অনুসন্ধান করা লোকদের জন্য একটি সমাধান লিখতে চেয়েছিলাম :)

দ্রষ্টব্য: আমি xunit সংস্করণ 2.4.1 সহ ডট নেট কোর ওয়েবইউআই ইন্টিগ্রেশন পরীক্ষায় এই পদ্ধতিটি ব্যবহার করি।

ননপ্যারেনালাল কালেকশনডিফিনিশনক্লাস নামে একটি খালি ক্লাস তৈরি করুন এবং তারপরে এই শ্রেণীর জন্য নীচে হিসাবে কালেকশনডিফিনিশন বৈশিষ্ট্য দিন। (গুরুত্বপূর্ণ অংশটি হ'ল DisableParallelization = সত্য সেটিংস))

using Xunit;

namespace WebUI.IntegrationTests.Common
{
    [CollectionDefinition("Non-Parallel Collection", DisableParallelization = true)]
    public class NonParallelCollectionDefinitionClass
    {
    }
}

তারপরে ক্লাসে কালেকশন অ্যাট্রিবিউট যুক্ত করুন যা আপনি এটি নীচের মতো সমান্তরালে চলতে চান না। (গুরুত্বপূর্ণ অংশটি সংগ্রহের নাম Collection এটি সংগ্রহের সংজ্ঞাতে ব্যবহৃত নামের সাথে অবশ্যই একই হবে)

namespace WebUI.IntegrationTests.Controllers.Users
{
    [Collection("Non-Parallel Collection")]
    public class ChangePassword : IClassFixture<CustomWebApplicationFactory<Startup>>
    ...

যখন আমরা এটি করি, প্রথমত অন্যান্য সমান্তরাল পরীক্ষাগুলি চালানো হয়। এর পরে অন্যান্য পরীক্ষাগুলিতে যা সংগ্রহ ("অ-সমান্তরাল সংগ্রহ") বৈশিষ্ট্য রান করে।


6

আপনি প্লেলিস্ট ব্যবহার করতে পারেন

পরীক্ষা পদ্ধতিতে ডান ক্লিক করুন -> প্লেলিস্টে যুক্ত করুন -> নতুন প্লেলিস্ট

তারপরে আপনি এক্সিকিউশন অর্ডারটি নির্দিষ্ট করতে পারবেন, ডিফল্ট হ'ল আপনি এগুলি প্লে তালিকায় যুক্ত করলেও আপনি প্লেলিস্ট ফাইলটি নিজের ইচ্ছামত পরিবর্তন করতে পারেন

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


5

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

  • কনফিগারেশন পড়ার ক্লাস
  • সার্ভিস হস্ট কারখানা (সম্ভবত সংহতকরণ পরীক্ষা হিসাবে)
  • ইঞ্জিন ক্লাস যা একটি IServiceHostFactoryএবং একটি নেয়IConfiguration

সরঞ্জামগুলি যা বিচ্ছিন্নকরণ (উপহাস) ফ্রেমওয়ার্ক এবং (optionচ্ছিকভাবে) আইওসি ধারক ফ্রেমওয়ার্কগুলিকে অন্তর্ভুক্ত করতে সহায়তা করবে। দেখা:


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

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

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

@ ট্রুইউইল: বিটিডাব্লু, আমি আপনার দক্ষতা মোটেও কমিয়ে দেওয়ার বিষয়ে উদ্বিগ্ন ছিলাম না ... আমি শুধু মিলের প্রচুর উত্তর পেতে চাইনি যা ইউনিট টেস্টিংয়ের সমস্ত সাধারণ বিষয় জুড়ে। খুব নির্দিষ্ট সমস্যার জন্য আমার দ্রুত উত্তর দরকার ছিল answer দুঃখিত আমি যদি কিছুটা কটূক্তি করতে এসেছি, আমার উদ্দেশ্য ছিল না? এই জিনিসটি কাজ করার জন্য আমার কাছে যথেষ্ট সীমিত সময় রয়েছে।
জ্রিস্টা

3

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

আপনি যে ক্রমটি চান তার অনুসারে কাজ করার জন্য কীভাবে পরীক্ষার পদ্ধতিগুলি বেন্ড করতে পারেন তা এখানে।

[Test]
[Sequence(16)]
[Requires("POConstructor")]
[Requires("WorkOrderConstructor")]
public void ClosePO()
{
  po.Close();

  // one charge slip should be added to both work orders

  Assertion.Assert(wo1.ChargeSlipCount==1,
    "First work order: ChargeSlipCount not 1.");
  Assertion.Assert(wo2.ChargeSlipCount==1,
    "Second work order: ChargeSlipCount not 1.");
  ...
}

এটি কাজ করে কিনা আমাকে জানান Do


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

4
অপেক্ষা করুন, প্রথমে আপনি বলছেন যে আপনি পরীক্ষাটি সমান্তরালভাবে চালিত করতে চান না, এবং তারপরে আপনি বলছেন যে সমস্যাটি হচ্ছে পরীক্ষার দৌড়করা সমান্তরালভাবে পরীক্ষা চালায় না ... তবে কোনটি?
গ্রাভিটন

আপনার দেওয়া লিঙ্কটি আর কাজ করে না। এবং এই কি আপনি xunit সঙ্গে করতে পারেন?
অ্যালেন ওয়াং

1

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


0

আমি একটি বেস শ্রেণিতে [সংগ্রহ ("সিক্যুয়াল")] বৈশিষ্ট্য যুক্ত করেছি :

    namespace IntegrationTests
    {
      [Collection("Sequential")]
      public class SequentialTest : IDisposable
      ...


      public class TestClass1 : SequentialTest
      {
      ...
      }

      public class TestClass2 : SequentialTest
      {
      ...
      }
    }

0

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

public class TestClass
{
    [Fact]
    void Test1()
    {
        lock (this)
        {
            //Test Code
        }
    }

    [Fact]
    void Test2()
    {
        lock (this)
        {
            //Test Code
        }
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.