Create System.Data.Linq.Table in Code for Testing

Posted by S. DePouw on Stack Overflow See other posts from Stack Overflow or by S. DePouw
Published on 2010-03-18T20:59:54Z Indexed on 2010/03/19 2:21 UTC
Read the original article Hit count: 548

Filed under:
|

I have an adapter class for Linq-to-Sql:

public interface IAdapter : IDisposable
{
    Table<Data.User> Activities { get; }
}

Data.User is an object defined by Linq-to-Sql pointing to the User table in persistence.

The implementation for this is as follows:

public class Adapter : IAdapter
{
    private readonly SecretDataContext _context = new SecretDataContext();

    public void Dispose()
    {
        _context.Dispose();
    }

    public Table<Data.User> Users
    {
        get { return _context.Users; }
    }
}

This makes mocking the persistence layer easy in unit testing, as I can just return whatever collection of data I want for Users (Rhino.Mocks):

Expect.Call(_adapter.Users).Return(users);

The problem is that I cannot create the object 'users' since the constructors are not accessible and the class Table is sealed. One option I tried is to just make IAdapter return IEnumerable or IQueryable, but the problem there is that I then do not have access to the methods ITable provides (e.g. InsertOnSubmit()). Is there a way I can create the fake Table in the unit test scenario so that I may be a happy TDD developer?

© Stack Overflow or respective owner

Related posts about linq-to-sql

Related posts about unit-testing