Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Assert Property Values for Two Objects or Two Lists

0.00/5 (No votes)
2 Mar 2016 1  
Helper class to compare two class objects while unit testing

Introduction

The following code snippet is a class that contains a method named PropertyValuesAreEquals. Often while unit testing the code, we come across situations where we need to compare two objects or two lists w.r.t. their properties and values.We want to ensure if all the values of properties are same in object 1 as in object 2. This code is an implementation of the same logic that compares two objects and also two lists if objects parameter turns out to be a List. One can use this code while writing unit tests as a helper class to assert two objects, i.e., actual vs expected.

First, install NUnit through package manager to a particular project where you want to keep this class by writing the following command in package manager console.

Install NUnit package

Using the Code

Following is the helper class:

using System.Collections;  
using System.Reflection;  
using NUnit.Framework;  
namespace TestsHelper  
{  
public static class AssertObjects  
{  
public static void PropertyValuesAreEquals(object actual, object expected)  
{  
PropertyInfo[] properties = expected.GetType().GetProperties();  
foreach (PropertyInfo property in properties)  
{  
object expectedValue = property.GetValue(expected, null);  
object actualValue = property.GetValue(actual, null);  
if (actualValue is IList)  
AssertListsAreEquals(property, (IList)actualValue, (IList)expectedValue);  
else if (!Equals(expectedValue, actualValue))  
if (property.DeclaringType != null)  
Assert.Fail("Property {0}.{1} does not match. Expected: {2} but was: {3}", 
property.DeclaringType.Name, property.Name, expectedValue, actualValue);  
}  
}  

private static void AssertListsAreEquals(PropertyInfo property, IList actualList, IList expectedList)  
{  
if (actualList.Count != expectedList.Count)  
Assert.Fail("Property {0}.{1} does not match. Expected IList containing {2} 
elements but was IList containing {3} elements", property.PropertyType.Name, 
property.Name, expectedList.Count, actualList.Count);  
for (int i = 0; i < actualList.Count; i++)  
if (!Equals(actualList[i], expectedList[i]))  
Assert.Fail("Property {0}.{1} does not match. Expected IList with element {1} 
equals to {2} but was IList with element {1} equals to {3}", 
property.PropertyType.Name, property.Name, expectedList[i], actualList[i]);  
}  
}  
}  

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here