数据转换应该怎么写单元测试?
How should unit test be written for data transformation?
通常我的工作流程是这样的:
- 对数据库执行 SQL 查询,
- 加载到内存中
- 根据逻辑转换数据
foo()
- 将转换后的数据插入数据库中的 table。
这种工作流应该怎么写单元测试?我真的是测试新手。
无论如何,我正在使用 Python 3.4.
测试这种工作流的一种方法是使用专门用于测试的特殊数据库。测试数据库反映了生产数据库的结构,但在其他方面是完全空的(即表中没有数据)。那么套路如下
- 连接到测试数据库(并可能重新加载其结构)
- 对于每个测试用例,执行以下操作:
- 将测试例程所需的最少数据集加载到数据库中
- 运行 你的函数来测试并获取它的输出(如果有的话)
- 执行一些测试以查看您的函数是否完成了您预期它要做的事情。
- 在下一个测试用例运行之前从数据库中删除所有数据
- 完成所有测试后,断开与数据库的连接
理想情况下,单元测试不接触数据库。数据库很慢,使用它们的测试变得相互依赖,以与测试无关的混乱方式。那么,在您的四个步骤中,您想要进行单元测试的步骤是#3,foo()。 foo() 应该有一个输入(将从数据库加载的数据和输出(将写回数据库的数据)。您的测试应该创建完全在内存中的输入,并将其传递给 foo( ),并确认结果是您期望 foo() 为该输入生成的结果。
关于不涉及数据库的单元测试,请参阅Michael Feathers' definition of a unit test。
通常我的工作流程是这样的:
- 对数据库执行 SQL 查询,
- 加载到内存中
- 根据逻辑转换数据
foo()
- 将转换后的数据插入数据库中的 table。
这种工作流应该怎么写单元测试?我真的是测试新手。
无论如何,我正在使用 Python 3.4.
测试这种工作流的一种方法是使用专门用于测试的特殊数据库。测试数据库反映了生产数据库的结构,但在其他方面是完全空的(即表中没有数据)。那么套路如下
- 连接到测试数据库(并可能重新加载其结构)
- 对于每个测试用例,执行以下操作:
- 将测试例程所需的最少数据集加载到数据库中
- 运行 你的函数来测试并获取它的输出(如果有的话)
- 执行一些测试以查看您的函数是否完成了您预期它要做的事情。
- 在下一个测试用例运行之前从数据库中删除所有数据
- 完成所有测试后,断开与数据库的连接
理想情况下,单元测试不接触数据库。数据库很慢,使用它们的测试变得相互依赖,以与测试无关的混乱方式。那么,在您的四个步骤中,您想要进行单元测试的步骤是#3,foo()。 foo() 应该有一个输入(将从数据库加载的数据和输出(将写回数据库的数据)。您的测试应该创建完全在内存中的输入,并将其传递给 foo( ),并确认结果是您期望 foo() 为该输入生成的结果。
关于不涉及数据库的单元测试,请参阅Michael Feathers' definition of a unit test。