Unit testing 数据清理、验证和维护;测试驱动开发

Unit testing 数据清理、验证和维护;测试驱动开发,unit-testing,validation,testing,Unit Testing,Validation,Testing,我正在使用一个连接到外部供应商的应用程序。数据以异步方式到达,应用程序的许多“组件”使用数据。数据在进入系统之前已通过语法验证,但是每个“组件”根据其自身的规则对数据是否可用有不同的定义 当考虑为这些组件中的每一个进行测试驱动开发时,关于数据清理和验证的设计“最佳实践”是什么?这里假设组件1_有效性和组件1将有单独的测试用例。如果数据首先通过如上所述的组件1_验证,那么组件1、2、3的测试用例和实现是否可以接受已清理的数据?那么,系统测试是否可能确保在调用组件_x之前清理数据 EXTERNAL_

我正在使用一个连接到外部供应商的应用程序。数据以异步方式到达,应用程序的许多“组件”使用数据。数据在进入系统之前已通过语法验证,但是每个“组件”根据其自身的规则对数据是否可用有不同的定义

当考虑为这些组件中的每一个进行测试驱动开发时,关于数据清理和验证的设计“最佳实践”是什么?这里假设组件1_有效性和组件1将有单独的测试用例。如果数据首先通过如上所述的组件1_验证,那么组件1、2、3的测试用例和实现是否可以接受已清理的数据?那么,系统测试是否可能确保在调用组件_x之前清理数据

EXTERNAL_DATA_SOURCE -> [ASYNC_CALLBACK -> COMPONENT1_VALIADTION -> COMPONENT_1]
EXTERNAL_DATA_SOURCE -> [ASYNC_CALLBACK -> COMPONENT2_VALIADTION -> COMPONENT_2]
EXTERNAL_DATA_SOURCE -> [ASYNC_CALLBACK -> COMPONENT3_VALIADTION -> COMPONENT_3]
理论上,它也可能看起来像:

EXTERNAL_DATA_SOURCE -> [ASYNC_CALLBACK -> [ COMPONENT1_VALIADTION -> COMPONENT_1] ]
EXTERNAL_DATA_SOURCE -> [ASYNC_CALLBACK -> [ COMPONENT2_VALIADTION -> COMPONENT_2] ]
EXTERNAL_DATA_SOURCE -> [ASYNC_CALLBACK -> [ COMPONENT3_VALIADTION -> COMPONENT_3] ]
其中,被测组件为[COMPONENT1_Valiation->component_X]。这样每个组件都包含验证本身。但是,如果我希望多个组件使用相同的验证规则,或者希望实际单独测试验证组件,这会使事情变得复杂

我试图避免应用程序的每一层都需要数据验证

提前感谢,


好奇1

如果我正确理解了你的问题,那么这似乎更像是一个设计问题,而不是一个单元测试问题。根据数据验证的复杂程度,最好将数据验证组件与应用程序的实际组件分开。这样,查看组件的开发人员就不必费力地阅读所有的验证代码。此外,如果您可以跨多个不同的组件重用相同的验证组件,这可能是一个很好的设计决策

您需要做的是为每个组件制定一份“合同”。这很可能只是以类和方法文档的形式,解释该组件对输入的期望以及它将作为输出返回的内容。然后,您将编写单元测试,以确保您的代码遵守该契约。如果component1不是为处理无效数据而设计的,则不需要为其编写单元测试,因为它不是合同的一部分。您将对验证组件执行相同的操作

现在,您的开发人员需要确保他们按照您描述的方式构建应用程序,以便在调用常规组件之前调用验证组件。在这里,您将执行一些集成测试,以确保所有组件都正确连接


我被这个问题弄糊涂了,所以我希望这能有所帮助。

你好,米勒鲁瓦,非常感谢你的回答。你完美地回答了我的问题(迪皮蒂很难理解)。我感谢你的帮助!