如何使用LLBLGen进行模拟测试

4

你如何模拟LLBLGen?我发现有一个ILinqMetaData接口,但它没有提供任何有用的方法来进行模拟。我假设您希望编程使用ILinqMetaData接口以及生成的实体接口,以使对象松散地耦合到数据。是否有人有简单测试/模拟的示例?


很久以前,我知道...但你最终找到答案了吗?我也正在尝试模拟数据库和LinqMetaData类。我可以伪造ILinqMetaData,但我希望它返回模拟数据,而且我无法理解如何实现。 - crthompson
@paqogomez 我不太记得了,但我想当你生成实体时,你可以让它同时生成接口模板之类的东西。我会看看是否能找出来并回忆一下我们是怎么做的... 但不要抱太大希望。 - Joe Phillips
谢谢关注。我已经为实体生成了接口。我的问题是LinqMetaData返回Database<MyEntity>,而我需要模拟Database类。我还没有放弃,但应用程序的架构有点束缚我。任何帮助都将不胜感激,谢谢。 - crthompson
1
@paqogomez,我认为我们最终只是使用了存储库并在其中包装了 llblgen 的内容。 - Joe Phillips
1个回答

1

我认为这不仅限于LLBLGen,也许这可以帮助:

单元测试数据库驱动应用程序的最佳策略是什么?

个人而言,我通常不会测试我的数据库访问或存储库,只测试操作实体的逻辑,或者对整个堆栈(包括数据库)进行集成测试。

更新:这有帮助吗?它允许您通过模拟IOrderRepository来测试您的逻辑,而无需执行任何获取/持久化逻辑:

public class MyBusinessLogic 
{
    IOrderRepository orders;

    public MyBusinessLogic(IOrderRepository orders) 
    {
      this.orders = orders; 
    }

    public DoSomethingTestable(OrderEntity order)
    {
      order.Total = 100;
      orders.Save(order);
    }
}

我们正在使用自助服务范例,因此实体与数据库绑定在一起。我正在尝试找出如何规避这个问题。 - Joe Phillips
嗯,如果我想要API的灵活性,自助服务不会是我的首选...自助服务是为了抽象化数据访问,而且你必须能够假设它有效,所以你关心的应该是操作实体的逻辑,而不管数据是否被持久化/获取。 - Wiebe Tijsma
是的,但如果我想更新一个“订单”对象并将其持久化,我是编写一个仅更新我想要的特定信息的函数,还是可以使用脏位或类似的东西?理想情况下,我可以在我的业务逻辑中将实体对象作为我的数据持有者。 - Joe Phillips
你可以在一个类中编写逻辑,修改传入的实体,然后将其传递给(模拟的)存储库进行保存,最后检查该实体是否包含了预期的修改。 - Wiebe Tijsma
是的,我本质上将重写已经在实体类中的逻辑。我希望避免这样做,但如果不可能,那就不可能了。 - Joe Phillips
我不这么认为,我猜你在实体中耦合了持久化/获取逻辑?如果你想确保的话,也可以在LLBLGen Pro论坛上提问 http://www.llblgen.com/tinyforum/ - Wiebe Tijsma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接