How do you unit test a method containing a LINQ expression?
        Posted  
        
            by Phil.Wheeler
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Phil.Wheeler
        
        
        
        Published on 2010-04-15T10:17:17Z
        Indexed on 
            2010/04/17
            12:43 UTC
        
        
        Read the original article
        Hit count: 527
        
I'm struggling to get my head around how to accommodate a mocked method that only accepts a Linq expression as its argument.  Specifically, the repository I'm using has a First() method that looks like this:
public T First(Expression<Func<T, bool>> expression)
{
    return All().Where(expression).FirstOrDefault();
}
The difficulty I'm encountering is with my MSpec tests, where I'm (probably incorrectly) trying to mock that call:
public abstract class with_userprofile_repository
{
    protected static Mock<IRepository<UserProfile>> repository;
    Establish context = () =>
    {
        repository = new Mock<IRepository<UserProfile>>();
        repository.Setup<UserProfile>(x => x.First(up => up.OpenID == @"http://testuser.myopenid.com")).Returns(GetDummyUser());
    };
    protected static UserProfile GetDummyUser()
    {
        UserProfile p = new UserProfile();
        p.OpenID = @"http://testuser.myopenid.com";
        p.FirstName = "Joe";
        p.LastLogin = DateTime.Now.Date.AddDays(-7);
        p.LastName = "Bloggs";
        p.Email = "[email protected]";
        return p;
    }
}
I run into trouble because it's not enjoying the Linq expression:
System.NotSupportedException: Expression up => (up.OpenID = "http://testuser.myopenid.com") is not supported.
So how does one test these sorts of scenarios?
© Stack Overflow or respective owner