Every now and then I need to write tests that depend on the ID of a persistent object. IDs are usually private and read-only, assigned internally by your ORM, so I use a little fluent extension method to help set them via reflection.
public static class ObjectExtensions
{
// Helper to set private ID
public static T WithId<T>(this T obj, object id)
{
typeof(T)
.GetField("id", BindingFlags.Instance | BindingFlags.NonPublic)
.SetValue(obj, id);
return obj;
}
}
Tweak as desired to suit your naming conventions or base classes. Usage is as follows:
[TestFixture]
public class When_comparing_two_foos
{
[Test]
public void Should_not_be_the_same_if_they_have_different_ids()
{
var a = new Foo().WithId(4);
var b = new Foo().WithId(42);
a.Should().Not.Be.EqualTo(b);
}
}
October 7, 2009


