xUnit: দুটি তালিকা যুক্ত করুন <T> সমান?


108

আমি টিডিডি এবং এক্স ইউনেটে নতুন তাই আমি আমার পদ্ধতিটি দেখতে চাই যা দেখতে এমন কিছু দেখাচ্ছে:

List<T> DeleteElements<T>(this List<T> a, List<T> b);

আমি ব্যবহার করতে পারি এমন কোন আসার পদ্ধতি আছে? আমি মনে করি এরকম কিছু সুন্দর হবে

List<int> values = new List<int>() { 1, 2, 3 };
List<int> expected = new List<int>() { 1 };
List<int> actual = values.DeleteElements(new List<int>() { 2, 3 });

Assert.Exact(expected, actual);

এরকম কিছু আছে কি?

উত্তর:


135

xUnit.Net সংগ্রহগুলি স্বীকৃতি দেয় যাতে আপনার কেবল প্রয়োজন

Assert.Equal(expected, actual); // Order is important

আপনি অন্যান্য সংগ্রহস্থল সংগ্রহের সংগ্রহগুলি সংগ্রহশালার পরিষেবাগুলিতে দেখতে পারেন

জন্য NUnit গ্রন্থাগার সংগ্রহে তুলনা পদ্ধতি

CollectionAssert.AreEqual(IEnumerable, IEnumerable) // For sequences, order matters

এবং

CollectionAssert.AreEquivalent(IEnumerable, IEnumerable) // For sets, order doesn't matter

আরও বিশদ এখানে: সংগ্রহশালা

MbUnit : এছাড়াও সংগ্রহে NUnit অনুরূপ গবেষকেরা হয়েছে Assert.Collections.cs


1
সোর্স কোডের লিঙ্কটি xunit.codeplex.com/SourceControl/changeset/view/… এর
— জুলিয়েন

1
মন্তব্যে নতুন লিঙ্কটিও ভেঙে গেছে।
— স্কট স্টাফোর্ড

1
প্রকল্পটি এখন গিটহাব-এ স্থানান্তরিত হয়েছে, তবে আমি সেখানে বিশেষ উত্স ফাইলটি খুঁজে পাইনি able
— মেমার্ক

1
জটিল অবজেক্টের জন্য ভুলে যাবেন না যে এটির জন্য কাজ করতে বা সমান পদ্ধতিটিকে একটি কাস্টম এক্যুলিটি
— কমপ্লেয়ার

2
xUnit সমান পদ্ধতি দুটি সমমূল্যের সামগ্রী সহ দু'টি সংখ্যার জন্য মিথ্যা প্রদান করে।
— ভ্লাদিমির কোকজানিক

31

XUnit (1.5) এর বর্তমান সংস্করণে আপনি কেবল ব্যবহার করতে পারেন

Assert.Equal (প্রত্যাশিত, আসল);

উপরের পদ্ধতিটি দুটি তালিকার উপাদান তুলনা করে একটি উপাদান করবে। আমি নিশ্চিত নই যে এটি কোনও পূর্ববর্তী সংস্করণের জন্য কাজ করে।


7
আমি Assert এর সাথে যে সমস্যাটির মুখোমুখি হয়েছি col সংগ্রহের জন্য সমপরিমাণ হ'ল সংগ্রহগুলির উপাদানগুলি পৃথক ক্রমে থাকলেও উপাদানগুলি উভয়টিতে উপস্থিত থাকলে এটি ব্যর্থ হয়।
— স্কট লরেন্স 20

1
@ স্কটএ.লাওরেন্স তালিকারও অর্ডার রয়েছে! আপনি কি হ্যাশসেটসের সাথে একই আচরণ পান?
— jhv

@ জোভভ আমি হ্যাশসেটের সাথে এটি পরীক্ষা করিনি, তবে এটি একটি ভাল ধারণা। একবার চেষ্টা করার সুযোগ পেলে আমি এখানে উত্তর দেওয়ার জন্য মনে রাখার চেষ্টা করব।
— স্কট লরেন্স

2
সংগ্রহের ধরণগুলি পৃথক হলেও একই রকম ক্রমে একই আইটেম দুটি থাকলেও এটি ব্যর্থ বলে মনে হয়।
— জেমস হোয়াইট

3
তবে এটির একটি খুব কৃপণ আউটপুট রয়েছে। দু'টি তালিকার আলাদা হওয়াতে এটি আপনাকে বলবে না! :(
— জোর্ডিড

16

XUnit এর সাহায্যে, আপনি Assert।

Assert.Collection(elements, 
  elem1 => Assert.Equal(expect1, elem1.SomeProperty),
  elem2 => { 
     Assert.Equal(expect2, elem2.SomeProperty);
     Assert.True(elem2.TrueProperty);
  });

এটি প্রত্যাশিত গণনা পরীক্ষা করে এবং প্রতিটি ক্রিয়া যাচাই করা হয় তা নিশ্চিত করে।


2

সম্প্রতি, আমি ব্যবহার ছিল xUnit 2.4.0এবং Moq 4.10.1আমার asp.net কোর 2.2 অ্যাপে প্যাকেজ।

আমার ক্ষেত্রে আমি দুটি পদক্ষেপের প্রক্রিয়াটি নিয়ে এটি পরিচালনা করতে সক্ষম হয়েছি:

  1. একটি বাস্তবায়ন সংজ্ঞা IEqualityComparer<T>

  2. তৃতীয় প্যারামিটার হিসাবে Assert.Trueপদ্ধতিতে তুলনামূলক উদাহরণটি পাস করুন :

    Assert.True(expected, actual, new MyEqualityComparer());

তবে ফ্লুএন্টএসারেশনস প্যাকেজ ব্যবহার করে একই ফলাফল পাওয়ার আরও একটি দুর্দান্ত উপায় রয়েছে । এটি আপনাকে নিম্নলিখিতগুলি করতে অনুমতি দেয়:

// Assert          
expected.Should().BeEquivalentTo(actual));

মজার বিষয় Assert.Equal()হ'ল সর্বদা ব্যর্থ হয় এমনকি যখন আমি দুটি তালিকার উপাদানগুলিকে একই ক্রমে পেতে আদেশ করি।


2
আপনার অর্ডার দেওয়ার সাথে কিছু ভুল যা বেইকুইভ্যালেন্টটি অর্ডার সম্পর্কে তেমন যত্ন নেয় না (তবে কেন আপনার পরীক্ষাটি বেকুইভ্যালেন্টটো দিয়ে পাস করে এবং দৃ as়তার সাথে নয় কেন qu একল)
— রাগনাআরক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.