【问题标题】:Mocking LINQ To SQL data provider, NotSupportedException on Live code模拟 LINQ To SQL 数据提供程序,实时代码上的 NotSupportedException
【发布时间】:2010-09-03 19:57:16
【问题描述】:

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

当我将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?

目前我正在排队测试数据库而不是内存模拟来捕获此类错误。

感谢您的建议。

【问题讨论】:

    标签: unit-testing linq-to-sql mocking


    【解决方案1】:

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

    根据我的经验,使用 ORM 很难避免这种问题 - 如果不运行 SQL Server,您将如何准确地模拟整个 SQL Server?这并不意味着 ORM 没有用或类似的东西 - 只是存在限制。

    【讨论】:

    • 啊,对不起。我已经将“对象”修复为“SQL”。星期五,喝醉了:)。感谢您的快速回复并指出错误的术语
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    相关资源
    最近更新 更多