gpt4 book ai didi

sqlite - 使用 SqlCe 作为数据库并使用 Sqlite 进行单元测试

转载 作者:行者123 更新时间:2023-12-03 18:30:30 25 4
gpt4 key购买 nike

目前我正在使用 SqlCe 作为我的项目的数据库并使用 Sqlite 进行单元测试,因为它很简单(例如允许使用 Inmemory)。我只是想知道,将来这可能会导致争议或奇怪吗?

最佳答案

如果在单元测试中使用不同的持久性机制会导致问题,那么问题可能是由以下原因引起的:

  • 您的单元测试
  • 您的通用应用架构

  • 你为一个对象编写的测试不应该依赖于它们的依赖关系的任何实现方式,这样做自动意味着你的 单位测试变成 集成 测试。

    你应该使用 Persistence Ignorance 的概念来设计你的对象。 ,这意味着它们的实现方式使得它们的实现不依赖于底层数据源的实现方式。在企业应用程序内部实现 PI 的常用方法是使用 the Repository Pattern .这将您的对象用于从数据源本身的底层实现访问数据源的接口(interface)抽象出来。这意味着,理论上,您可以为不同的数据源创建新的提供者,而无需更改依赖于它们的对象的实现。

    例如:

    假设您有一个名为 Customer 的实体。您保存在 SqlCe 数据库中。您可以创建一个名为 ICustomerRepository 的接口(interface)由 SqlCeCustomerRepository 实现您在主应用程序中使用它。这样,在您的单元测试中,您可以将其换成 SqlLiteCustomerRepository如果您发现这是一种创建模拟数据源的简单方法。为了让事情更简单,您可以创建一个 InMemoryCustomerRepository使用了 List<T>在引擎盖下存储和检索您的对象。关键是如何实现数据源并不重要,只要它符合您在存储库接口(interface)上设置的契约(Contract)。

    这种模式的好处不仅限于单元测试,还可以用于应用程序的一般维护。假设您想扩展您的体系结构并使用 SQL Server 而不是 SQL CE,使用诸如存储库之类的抽象将有助于限制系统中为实现这一点所需的更改量,从而减少开发时间,减少错误,和更快乐的客户。

    关于sqlite - 使用 SqlCe 作为数据库并使用 Sqlite 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12059340/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com