【问题标题】:How should unit test be written for data transformation?数据转换应该如何编写单元测试?
【发布时间】:2015-08-02 08:04:59
【问题描述】:

通常我的工作流程如下:

  1. 对数据库执行 SQL 查询,
  2. 将其加载到内存中
  3. 根据逻辑转换数据foo()
  4. 将转换后的数据插入到数据库中的表中。

应该如何为这种工作流程编写单元测试?我对测试真的很陌生。

无论如何,我使用的是 Python 3.4。

【问题讨论】:

    标签: python unit-testing tdd integration-testing


    【解决方案1】:

    理想情况下,单元测试不涉及数据库。数据库很慢,使用它们的测试变得相互依赖,以与测试无关的混乱方式。那么,在您的四个步骤中,您要进行单元测试的是#3,foo()。 foo() 应该有一个输入(将从数据库加载的数据和输出(将写回数据库的数据)。您的测试应该创建输入,完全在内存中,将其传递给 foo( ),并确认结果是您期望 foo() 为该输入生成的结果。

    关于不涉及数据库的单元测试,请参阅Michael Feathers' definition of a unit test

    【讨论】:

      【解决方案2】:

      测试这种工作流程的一种方法是使用专门用于测试的数据库。测试数据库反映了生产数据库的结构,但在其他方面完全是空的(即表中没有数据)。那么套路如下

      • 连接到测试数据库(并可能重新加载其结构)
      • 对于每个测试用例,请执行以下操作:
        • 将最小的数据集加载到数据库中以测试您的例程
        • 运行您的函数以测试并获取其输出(如果有)
        • 执行一些测试以查看您的函数是否按照您的预期完成。
        • 在下一个测试用例运行之前从数据库中删除所有数据
      • 完成所有测试后,断开与数据库的连接

      【讨论】:

        猜你喜欢
        • 2017-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-03
        • 2019-01-28
        • 1970-01-01
        相关资源
        最近更新 更多