【问题标题】:Writing a unit testing framework for testing SQL stored procedures编写用于测试 SQL 存储过程的单元测试框架
【发布时间】:2010-09-19 21:36:42
【问题描述】:

今天我有了一个想法,想为 MySQL 中的存储过程编写一个单元测试框架。完整的想法写在我博客上最近的一篇文章中。简而言之,它是这样的: 我想自动化我的程序测试,我想使用标准化的方式来测试我的程序。单元测试被广泛记录,并且有无数的 XUnit 框架,为什么不为 MySQL(或任何其他数据库)编写一个。 它当然是开源的。 你怎么看?这是愚蠢的,愚蠢的,不必要的还是什么? 或者另一个想法是用 SQL 编写一个通用的数据库框架。嗯,我很想和某人讨论一下,收集想法和想法。

【问题讨论】:

  • 一个不同但相关的场景:我见过外键意外丢失并在一两个月后造成严重破坏的案例。对这样的场景进行自动化测试可能是个好主意。
  • 当然……您实际上可以对整个数据库进行单元测试,设置场景,测试它们,然后将数据库回滚到之前的状态。每个主要的 RDMBS 都有执行此操作的工具。
  • 这是愚蠢的、愚蠢的、不必要的还是什么?是的
  • 你的意思是像MyTAP

标签: mysql unit-testing frameworks


【解决方案1】:

我倾向于对数据访问层进行单元测试,这总是让人头疼,因为您必须使用适当的数据设置适当的数据库。有一些数据生成器(如 RedGate 的数据生成器)可以帮助简化设置过程。

我只是测试 DAL 背后的想法是,您实际上是在使用添加的 .Net DB 代码测试存储过程本身,我认为我们不需要担心单元测试。通过这种方式,您可以利用已有的所有工具和流程进行单元测试。为可以(恕我直言)与现有工具同样出色地执行的东西开发一个单独的框架似乎需要付出很多努力。

不过,我有一个开放的心态。如果有我忽略的好处,请告诉我。

干杯, V

【讨论】:

  • 那就称之为集成测试。我认为我们不会通过争论语义得到更好的答案。
【解决方案2】:

已经有一个用于 Sql Server 的测试框架 - TSQLUnit。也许你可以从中得到一些有用的信息。

【讨论】:

  • 谢谢链接,我一定会检查的。
【解决方案3】:

其中一个好处是测试将在与存储过程编写和执行的环境相同的环境中编写,由主应用程序外部的专业数据库开发人员维护。 应用程序开发人员无需成为关系数据库编程的大师,也无需数据库开发人员掌握现代应用程序开发语言。 你现在对每一件事都进行了测试。为什么不让它们为数据库编写 sql 并在任何内部开发的应用程序之外执行。

如果您正在开发一个多层应用程序,那么将每个部分分开并单独测试它是有意义的。

【讨论】:

  • 我想在我看来,数据库主要用于数据,我试图将逻辑排除在数据库之外。甚至我的大部分存储过程都是相对无逻辑的。我明白 DBA 的意义所在,我想让他们远离我的单元测试 :)
  • 是的,但它们也具有数据操作能力。我们通常做的是在我们的软件中提供业务逻辑以及对数据库的调用,但我们真正需要的是传递一些参数并期望在一次调用中得到结果。当我们这样做时,我们需要自动化测试。
【解决方案4】:

数据库中不应该有足够的逻辑来使测试变得有价值。

【讨论】:

  • 为什么不呢?数据库是一种功能强大的工具,在大多数情况下完全不用。为什么不使用它?
  • 计算机科学书籍经常敦促用户充分利用数据库做更多的事情,以便程序可以做更少的事情。数据库通常可以使用多个连接、嵌套选择、IN 子句等结构来执行复杂的逻辑,这比程序员的第一个实现要快得多,更无错误,并且用户的编程工作要少得多。 (情况并非总是如此;有时数据库是仔细的算法编程可以克服的瓶颈。)一般来说,数据库中没有足够的逻辑来使测试变得有价值是不正确的。
【解决方案5】:

是的,好主意。我在pgTAP 上取得了相当大的成功。我在许多项目中都使用了它,既用于test driven database development,也用于为现有程序编写测试以便能够有效地重构它们。

我经常被问到是否有类似 MySQL 的东西。也许你现在已经写了一些东西?

【讨论】:

    【解决方案6】:

    【讨论】:

    • 此单元测试不适用于 MySql。这个人要求为 MySql 开发一个单元测试框架。
    【解决方案7】:

    那里已经有单元测试。除了dbUnit和sqlUnit,试试:

    MyTAP:https://github.com/hepabolu/mytap
    datacharmer.org:http://datacharmer.blogspot.com/2006/01/mysql-5-general-purpose-routine_27.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 2023-04-03
      • 2010-11-04
      • 1970-01-01
      相关资源
      最近更新 更多