Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to stub DbSet.Find

// acknowledgement: http://stackoverflow.com/a/5022512/1500199
public class FakeDbSet<T> : IDbSet<T> where T : class
{
    private readonly HashSet<T> data;
    private readonly IQueryable query;

    public FakeDbSet()
    {
        data = new HashSet<T>();
        query = data.AsQueryable();
    }

    public virtual T Find(params object[] keyValues)
    {
        throw new NotImplementedException();
    }
}

How can I implement Find?

I need to determine the primary key value of T in order to perform a key value comparison in the Find method but I do not know how.

like image 741
Caster Troy Avatar asked Dec 31 '25 16:12

Caster Troy


1 Answers

Try this:

public class FakeDbSet<T> : IDbSet<T> where T : class
{
    private Func<T, object[], bool> _findSelector
    private readonly HashSet<T> data;
    private readonly IQueryable query;

    public FakeDbSet(Func<T, object[], bool> findSelector)
    {
        _findSelector = findSelector;
        data = new HashSet<T>();
        query = data.AsQueryable();
    }

    public virtual T Find(params object[] keyValues)
    {
        return _data.SingleOrDefault(item => _findSelector(item, keyValues));
    }
}
like image 130
Keith Payne Avatar answered Jan 02 '26 04:01

Keith Payne