代码之家  ›  专栏  ›  技术社区  ›  Peter

如何使用LINQ to SQL的人员单元测试代码

  •  53
  • Peter  · 技术社区  · 16 年前

    如何使用LINQ to SQL的人员单元测试代码?

    7 回复  |  直到 11 年前
        1
  •  14
  •   David Dowdle    11 年前

    更新:

    Fredrik在他的博客上给出了一个关于如何进行linq2sql应用程序单元测试的示例解决方案。您可以从以下网址下载:

    http://web.archive.org/web/20120415022448/http://iridescence.no/post/DataContext-Repository-Pattern-Example-Code.aspx

    我不仅认为他发布了一个示例解决方案很好,而且他还设法为所有类提取接口,这使得设计更加分离。

    我的老帖子:

    *我发现这些博客是制作DataContext包装器的好开端: Link1 Link2

    它们涵盖了几乎相同的主题,除了第一个主题实现了为表提取接口的方法。不过,第二个更广泛,所以我也包括在内。*

        2
  •  6
  •   Luke Sampson    13 年前

    晚了3年,但我就是这样做的:

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

    不需要编写一个包装器或进行大量的管道工程,只需将t4模板放在.dbml旁边,就可以得到:

    1. 数据上下文的接口,例如iexampledataContext
    2. 用于数据上下文的内存模拟,例如memoryExambleDataContext

    这两者都将自动使用已经在DBML中配置的映射。

    所以你可以做像

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

    你可以打电话给

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

    new ProductRepo(new ExampleDataContext()).GetProducts(); // use the real DB
    
        3
  •  4
  •   Will    16 年前

    包装DataContext,然后模拟包装。这是最快完成测试的方法,尽管它需要为测试编码,有些人认为这是气味。但是,有时,当你有不能(容易)被嘲笑的依赖时,这是唯一的方法。

        4
  •  3
  •   Danimal    16 年前

    马特沃尔 The Wayward Web Log 有一篇关于如何模拟可扩展Linq2SQL数据上下文的好文章。检查一下-- MOCKS NIX - AN EXTENSIBLE LINQ TO SQL DATACONTEXT

        5
  •  2
  •   Mendelt    16 年前

    Linq使测试更加容易。LINQ查询在列表上和在LINQ to SQL的东西上工作得一样好。您可以将linq-to-sql换成list对象,然后进行测试。

        6
  •  1
  •   Mark Cidade    16 年前

    通常,您不需要测试使用Linq to SQL的代码部分,但是如果您真的想这样做,您可以使用与对服务器进行查询相同的数据集,并将它们转换为内存中的对象,然后针对该对象运行Linq查询(这将使用可枚举方法而不是可查询方法)。

    另一种选择是使用Matt Warren的 mockable version of the DataContext .

    您还可以通过调试器(从IQueryable对象)获取Linq to SQL使用的SQL语句,手动检查这些语句,然后将它们包括在自动测试中。

        7
  •  1
  •   David Dowdle    11 年前

    实际上,linq-to-sql对于单元测试非常好,因为它能够根据DBML中定义的内容动态创建数据库。

    通过DataContext创建数据库并让它从空开始,这使得测试ORM层变得非常好。

    我在我的博客上写到: http://web.archive.org/web/20090526231317/http://www.aaron-powell.com/blog/may-2008/unit-testing-linq-to-sql.aspx