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.