How are people unit testing code that uses Linq to SQL

后端 未结 7 821
生来不讨喜
生来不讨喜 2021-01-30 06:24

How are people unit testing code that uses Linq to SQL?

相关标签:
7条回答
  • 2021-01-30 06:56

    3 years late, but this is how I do it:

    https://github.com/lukesampson/LinqToSQL-test-extensions/

    No need to write a wrapper or do lots of plumbing, just drop the T4 template next to your .dbml and you get:

    1. An interface for your data context e.g. IExampleDataContext
    2. An in-memory mock for your data context e.g. MemoryExampleDataContext

    Both will automatically use the mappings you've already configured in your DBML.

    So you can do things like

    public class ProductRepo {
        IExampleDataContext DB { get; set };
        public ProductRepo(IExampleDataContext db) {
            DB = db;
        }
    
        public List<Product> GetProducts() {
            return DB.Products.ToList();
        }
    }
    

    and you can call that with either

    new ProductRepo(new MemoryExampleDataContext()).GetProducts(); // for testing
    

    or

    new ProductRepo(new ExampleDataContext()).GetProducts(); // use the real DB
    
    0 讨论(0)
  • 2021-01-30 07:01

    LINQ to SQL is actually really nice to unit test as it has the ability to create databases on the fly from what is defined in your DBML.

    It makes it really nice to test a ORM layer by creating the DB through the DataContext and having it empty to begin with.

    I cover it on my blog here: http://web.archive.org/web/20090526231317/http://www.aaron-powell.com/blog/may-2008/unit-testing-linq-to-sql.aspx

    0 讨论(0)
  • 2021-01-30 07:05

    Wrap the DataContext, then mock the wrapper. Its the fastest way to get it done, tho it requires coding for testing, which some people think smells. But sometimes, when you have dependencies that cannot be (easily) mocked, its the only way.

    0 讨论(0)
  • 2021-01-30 07:05

    Mattwar over at The Wayward Web Log had a great article about how to mock up an extensible Linq2Sql data context. Check it out -- MOCKS NIX - AN EXTENSIBLE LINQ TO SQL DATACONTEXT

    0 讨论(0)
  • 2021-01-30 07:07

    Normally, you don't need to test the part of the code that uses LINQ to SQL but if you really want to, you can use the same data sets that you're querying against the server and turn them into in-memory objects and run the LINQ queries against that (which would use the Enumerable methods instead of Queryable).

    Another option is to use Matt Warren's mockable version of the DataContext.

    You can also get the SQL statements that LINQ to SQL uses by getting them via the debugger (from the IQueryable object), check those manually, and then include them in the automated tests.

    0 讨论(0)
  • 2021-01-30 07:18

    Linq makes testing much easier. Linq queries work just as well on Lists as on the Linq-to-sql stuff. You can swap out Linq to SQL for list objects and test that way.

    0 讨论(0)
提交回复
热议问题