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