【问题标题】:How to mock with LLBLGen如何使用 LLBLGen 进行模拟
【发布时间】:2023-03-18 08:30:01
【问题描述】:

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

【问题讨论】:

  • 很久以前我就知道.. 但是你有没有找到答案?我现在也在尝试模拟 Database 和 LinqMetaData 类。我可以伪造 ILinqMetaData,但我希望它返回模拟数据并且无法弄清楚如何。
  • @paqogomez 我不记得了,但我认为当你生成实体时,你可以让它生成界面模板和其他东西。我会看看我是否可以进行一些挖掘并记住我们是如何做到的......但不要抱太大希望
  • 感谢您的收看。我已经为实体生成了接口。我的问题是 LinqMetaData 返回 Database<MyEntity> 并且我需要模拟 Database 类。我不是没有想法,但我也有点被应用程序的架构所束缚。任何事情都会有所帮助,谢谢。
  • @paqogomez 我想我们只是最终使用了存储库并将 llblgen 东西包装在里面

标签: unit-testing mocking llblgen


【解决方案1】:

我认为它不仅限于 LLBLGen,也许这会有所帮助:

What's the best strategy for unit-testing database-driven applications?

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

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

public class MyBusinessLogic 
{
    IOrderRepository orders;

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

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

【讨论】:

  • 我们使用的是自助服务范式,因此实体与数据库相关联。我正在想办法解决这个问题。
  • 嗯,如果我想要 API 的灵活性,自助服务不会是我的第一选择......自助服务无论如何都会抽象出数据访问,你必须能够假设它有效,那么,无论数据是否被持久化/获取,您不应该关心对实体进行操作的逻辑吗?
  • 是的,但是如果我想更新一个“订单”对象并将其持久化,我是编写一个函数来仅更新我想要的特定信息,还是可以使用脏位或其他东西?理想情况下,我可以在我的业务逻辑中使用 Entity 对象作为我的数据持有者。
  • 你可以在类中编写逻辑来修改传入的实体,然后将其传递到(模拟的)存储库进行保存,然后检查该实体是否包含预期的修改?
  • 是的,我基本上会重写实体类中已经存在的逻辑。我希望避免这种情况,但如果不可能,那就不可能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 2011-03-18
  • 2020-08-20
相关资源
最近更新 更多