c# - ইউনিট টেস্টিং মধ্যে তালিকা তুলনা কিভাবে




visual-studio-2010 unit-testing (4)

কিভাবে এই পরীক্ষা ব্যর্থ হতে পারে?

[TestMethod]
public void Get_Code()
{
    var expected = new List<int>();
    expected.AddRange(new [] { 100, 400, 200, 900, 2300, 1900 });

    var actual = new List<int>();
    actual.AddRange(new [] { 100, 400, 200, 900, 2300, 1900 });

    Assert.AreEqual(expected, actual);
    // Assert.AreSame(expected, actual)       fails
    // Assert.IsTrue(expected.Equals(actual)) fails
}

আমি এই থ্রেডে অন্যান্য উত্তর চেষ্টা করেছিলাম, এবং তারা আমার জন্য কাজ করে নি এবং আমি এমন বস্তুর সংগ্রহগুলির তুলনা করছিলাম যা একই মানের তাদের বৈশিষ্ট্যগুলিতে সংরক্ষিত ছিল, কিন্তু বস্তুগুলি ভিন্ন ছিল।

পদ্ধতি কল:

CompareIEnumerable(to, emailDeserialized.ToIndividual,
            (x, y) => x.ToName == y.ToName && x.ToEmailAddress == y.ToEmailAddress);

তুলনা করার পদ্ধতি:

private static void CompareIEnumerable<T>(IEnumerable<T> one, IEnumerable<T> two, Func<T, T, bool> comparisonFunction)
    {
        var oneArray = one as T[] ?? one.ToArray();
        var twoArray = two as T[] ?? two.ToArray();

        if (oneArray.Length != twoArray.Length)
        {
            Assert.Fail("Collections are not same length");
        }

        for (int i = 0; i < oneArray.Length; i++)
        {
            var isEqual = comparisonFunction(oneArray[i], twoArray[i]);
            Assert.IsTrue(isEqual);
        }
    }

আমি এই সাহায্য করবে অনুমান

Assert.IsTrue(expected.SequenceEqual(actual));

যদি আপনি যাচাই করতে চান যে প্রতিটিটিতে মানগুলির একই সংগ্রহ রয়েছে তবে আপনাকে অবশ্যই ব্যবহার করতে হবে:

CollectionAssert.AreEquivalent(expected, actual);

সম্পাদনা:

"দুটি সংগ্রহ সমান সমান, যদি একই পরিমাণে একই উপাদানের একই উপাদান থাকে তবে কোনও ক্রমানুসারে। যদি সমান মূল্য থাকে তবে তার সমান সমান হয়, যদি তারা একই বস্তুর উল্লেখ না করে।" - msdn.microsoft.com/en-us/library/ms243779.aspx


সংগ্রহগুলি সম্পর্কে বিবৃতি তৈরি করতে, আপনাকে সংগ্রহস্থলটি ব্যবহার করতে হবে:

CollectionAssert.AreEqual(expected, actual);

List<T> Assert.AreEqual ওভাররাইড হয় না, তাই যদি Assert.AreEqual ঠিক Equals , এটি রেফারেন্স সমতা ব্যবহার করে শেষ হবে।





mstest