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

模拟Linq to SQL数据提供程序,不支持Live代码上的异常

  •  3
  • Roman  · 技术社区  · 15 年前

    关于使用数据访问层的单元测试模型对象的另一个“简单”问题。

    当我嘲笑我的时候 Table<Customer> IQuerable<ICustomer> 在哪里 new List<FakeCustomer>().AsQuerable() 用于内存数据存储,以下代码完全通过单元测试:

    var filteredCustomers = from c in dal.Customers
                            where c.Code.ToUpperInvariant() == "ABC"
                            select c;
    

    当运行应用程序时,我当然会 NotSupportedException (因为 ToUpperInvariant() )也许这是一个很蹩脚的例子,因为问题可以通过替换来解决。 ToupperInvariant()。 ToUpper() 但你说得对。

    问题:这样的不一致性对于编写真正的单元而不是集成测试来说是一种“费用”吗? 或者可能我做了一些错误的事情,例如,应该有另一种方法来模拟完全模拟Linq to SQL DataContext的DataContext?

    目前,我正在将测试数据库排队,而不是在内存模拟中捕捉这样的错误。

    谢谢你的建议。

    1 回复  |  直到 15 年前
        1
  •  4
  •   Jon Skeet    15 年前

    是的,这正是您为它支付的费用,而不是集成测试。当然,有集成测试和单元测试是一个好主意。

    以我的经验,很难避免ORM出现这种问题——在不运行SQL Server的情况下,如何准确地模拟整个SQL Server?这并不意味着ORM是无用的或类似的东西——只是有一些限制。