【问题标题】:Populating SQLite in memory for unit testing在内存中填充 SQLite 以进行单元测试
【发布时间】:2009-06-24 12:00:59
【问题描述】:

我正在考虑使用 SQLite 作为我的 Oracle 数据库的内存存根。我可以轻松地将所有 DAL 命令定向到 SQLite,但我现在想知道如何轻松地为每种测试方法填充数据。
每种方法都应该从创建所需的表并插入特定测试的行开始吗?我应该在 Fixture SetUp 阶段填充内存中的数据吗?还有其他方法吗(比如从某个文件中读取它,但丢弃更改以便下一次读取相同)?
也许我应该只用普通的存根存根数据库,并在需要时返回本地创建的对象(数据集和数据表)?我想过尝试这个,但是这样我就不会测试传递的实际查询,我正在尝试对执行 SQL 选择的方法进行单元测试。我也想测试查询的语法和有效性。

关于这方面的任何最佳做法?还是只是好主意?

【问题讨论】:

    标签: c# unit-testing sqlite nunit


    【解决方案1】:

    仅备份 SQLite-Db-File 怎么样?

    SQLite 的好处是,您可以随意复制整个 db 文件。您还可以使用 SQL 文件来使用数据填充某些 db 文件。我不完全理解您的问题,但是混合使用 db 文件(作为模板)和(可选)一些 SQL 文件来根据需要填充表应该足以解决非常困难的测试问题。

    还可以通过转储简单文件和(可选)删除不需要的条目或添加其他条目来轻松创建 SQL 文件。

    【讨论】:

    • 所以你认为我应该保留一个包含我的开始数据的文件,并为每个测试复制它,然后用 sqlite 打开它?恐怕它会使测试变得不可读,因为某个查询返回 1 行或另一个特定值的原因并不明显。读者必须一直检查输入文件。这不是问题吗?
    • 嗨,Noam,当然这完全取决于您拥有的测试环境以及您的具体需求。存储整个 db 文件有助于设置复杂的测试环境,而无需在代码中全部实现。当您想让它更具可读性时,您还可以从每次新鲜的转储文件中创建 db 文件。转储文件更具可读性。当你想把它全部写在代码里时,就是这样——你最终会全部写在代码里。
    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2019-08-25
    • 2015-04-21
    • 2020-09-18
    • 2022-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多