代码之家  ›  专栏  ›  技术社区  ›  Kevin Pang

单元测试Linq2 SQL延迟加载属性

  •  2
  • Kevin Pang  · 技术社区  · 15 年前

    假设我有一个客户表和一个一对多关联的订单表(一个客户可以有多个订单)。如果我有一些代码希望通过延迟加载(例如,对customer.orders的调用)来访问特定客户的订单,那么如何模拟/存根调用,以使其不影响数据库?

    编辑:

    更清楚地说,让我们用一个更具体的例子。比如说,我想退回某个特定客户的所有订单。我可以使用Linq2 SQL提供的自动生成的延迟加载属性编写它:

    Customer customer = customerRepository.GetCustomerById(customerId);
    
    return customer.Orders;
    

    然而,单元测试这有点困难。我可以模仿打给getCustomerByID的电话,但我不能(据我所知)模仿打给订单的电话。我唯一能想到的单元测试方法是:a)连接到数据库(这会减慢我的测试速度,并且很脆弱);b)不要使用懒惰的加载属性。

    不使用惰性加载属性,我可能会将上面的内容改写为:

    return orderRepository.GetOrdersByCustomerId(customerId);
    

    这肯定是可行的,但是仅仅为了单元测试而完全忽略懒惰的负载属性会让人觉得很尴尬。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Mark Seemann    15 年前

    customers.Orders