Tags: , | Categories: Reflection, UnitTests Posted by talgiladi on 12/4/2008 10:23 AM | Comments (4)

רק רציתי לעדכן פוסט מהעבר מתודה חדשה להשוואת אובייקטים בעת הבדיקות, משהו  יותר נחמד עם ג'נריקס

להזכיר, רציתי להשוות שני אובייקטים – אחד מה שהקוד החזיר ואחד זה מה שמצופה, אז כתבתי מתודה פשוטה שתשווה בין כל 2 אובייקטים.

הוספתי בסוף אופציה להוריד בדיקה של חלק מהמאפיינים – כמו למשל זמן יצירה  שיכול להיות שונה בדטה בייס:

public static void Compare<T>(T expected, T actual, params string[] exclude)

        {

            Assert.IsNotNull(expected);

            Assert.IsNotNull(actual);

            List<string> p = new List<string>();

            if (exclude != null)

            {

                p.AddRange(exclude);

            }

            foreach (var pi in typeof(T).GetProperties())

            {

                if (p.SingleOrDefault(a => a.Equals(pi.Name, StringComparison.InvariantCultureIgnoreCase)) != null)

                {

                    continue;

                }

                Assert.AreEqual(pi.GetValue(expected, null), pi.GetValue(actual, null), pi.Name);

            }

        }

והשימוש פשוט כמובן:

[TestMethod()]

        public static void Test()

        {

            var a = new MailMessage()

            {

                Subject = "MYSubject",

                Body = Guid.NewGuid().ToString()

            };

            var b = new MailMessage()

            {

                Subject = "MYSubject",

                Body = Guid.NewGuid().ToString()

            };

            Compare<MailMessage>(a, b, null);//will fail

            Compare<MailMessage>(a, b, "Body");//will pass

        }

Technorati Tags: ,

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Comments