Assert.AreEqual(4, 2 + 2);
Assert.That(2 + 2, Is.EqualTo(4));
// Simple values
Assert.That(someInt, Is.Negative);
Assert.That(someString, Is.Not.Null.And.Not.Empty);
Assert.That(someObject, Is.Null);
// Collections
Assert.That(someList, Is.Not.Empty);
Assert.That(intArray, Is.All.GreaterThan(10); // All intergers in array are bigger than 10
Assert.That(array, Has.Exactly(1).GreaterThan(3)); // Exactly one item bigger than 3
Assert.That(someEnumerable, Is.All.Property("MyProp").EqualTo(25));
Assert.That(someEnumerable, Is.All.Property<MyType>(m => m.MyProp).EqualTo(25));
public static ResolvableConstraintExpression Property<T>(
this NUnit.Framework.Constraints.ConstraintExpression expression, Expression<func<T, object>> lambda)
{
MemberExpression memberExpression = null;
switch (lambda.Body.NodeType)
{
case ExpressionType.Convert:
// lambda is obj => Convert(obj.Prop) - the operand of conversion is our member expression
var unary = lambda.Body as UnaryExpression;
if (unary == null)
{
Assert.Fail("Cannot parse expression");
}
memberExpression = unary.Operand as MemberExpression;
break;
case ExpressionType.MemberAccess:
// lambda is (obj => obj.Prop) - the body is the member expression
memberExpression = lambda.Body as MemberExpression;
break;
default:
Assert.Fail("Cannot parse expression");
break;
}
if (memberExpression == null || string.IsNullOrEmpty(memberExpression.Member.Name))
{
Assert.Fail("Labda body is not MemberExpression - use only properties");
}
var propertyName = memberExpression.Member.Name;
return expression.Property(propertyName);
}
Labels: .NET, C#, DSL, NUnit, Unit tests