开发说我已经做了单元测试了,已经测试过很多种场景了,QA再做契约测试,集成测试,E2E测试的时候,只需要自己mock相关的数据,不应再覆盖单元测试的用例了,这种说法有问题吗
这个说法在某种程度上是正确的,但也需要具体问题具体分析。
对于开发来说,他们的单元测试主要目的是验证每一部分代码,每一个函数或方法是否在特定的输入条件下返回预期结果。换句话说,单元测试的主要关注点是代码层面的问题。 然而,即使所有的单元测试通过,也无法保证应用在更高层级(组件、集成或系统层面)的行为。这是因为在单元测试中通常会将复杂的外部依赖项(比如数据库、APIs或者其他外部服务)替换为模拟对象。因此,可能出现单元测试全部通过但在集成测试或系统测试中却发现问题的情况。与此同时,单元测试通常不考虑并发性问题、安全性问题和性能问题等。 然而,开发指出的一点很重要那就是避免测试用例的重复,以免浪费资源。在设计集成测试,E2E测试的用例的时候,除非有特殊的理由,如确保单元测试的完整性等,否则确实应尽量避免覆盖和单元测试相同的场景。但是,理论上,即使mock一些数据,也可以执行和单元测试不同的测试场景。因此,开发这种说法并没有问题,关键在于如何设计测试用例以最大限度地提高测试覆盖率并减少重复测试。 至于契约测试,它是为了确保不同服务之间的通信正确无误。如果单元测试已经覆盖了这部分,那么在契约测试中可以不再进行重复的测试。 总的来说,第一优先级是保障产品功能的正确性和性能,这需要在不同测级别进行不同的测试,同时也要设计好测试用例以避免重复测试导致的资源浪费。
那你刚才给我设计的测试用例,和单元测试有冲突吗 刚才设计的测试用例针对的是API的集成测试,主要从整体接口的角度测试,例如输入正确和错误的参数后API是否返回预期的结果、状态码。虽然有些场景可能会和单元测试有所重复,但集成测试与单元测试关注的层面不同。 1.单元测试主要是针对某个函数或方法进行测试。验证在给定输入的情况下,是否能得到预期的输出。它关注的是代码级别的正确性。 2.集成测试则是测试各个单元组合后,系统作为一个整体的行为是否满足预期,即它关注的是系统级别的正确性。集成测试要验证API在和其它系统模块、数据库、第三方服务交互时是否能正确工作。 虽然上述两种测试可能会有一些重复,但它们的目的、侧重点和所要解决的问题是不同的。单元测试能发现代码级别的问题,而集成测试能发现模块间交互的问题。 需要注意的是,合理的测试策略应该是尽量避免重复的测试,即避免在系统级别测试那些已经在单元测试中验证过的内容。然而,为了确保系统的稳定性和可靠性,一些重要的、关键的测试场景,在系统级别测试时有时候还是需要验证的,过度依赖单元测试可能会让一些集成问题、交互问题和系统问题被忽略。 所以并不是说刚才的测试用例和单元测试一定有冲突,在实际的测试工作中,我们需要根据实际情况,以及对系统的理解来设计合适的测试用例。
那你刚才给我设计的测试用例,和单元测试有重复吗 你刚提到的测试用例更像是接口测试或者集成测试的例子,而不是单元测试。在单元测试中,更多的是对某一函数或者方法的调用进行测试,验证其返回是否和预期一致。而你提到的例子则是调用API并验证其响应结果是否一致,这在某种程度上和单元测试的目标是不同的。 然而,这并不意味着这些测试用例和单元测试之间不存在任何重叠。比如,当开发人员进行单元测试时,他们可能会模拟API的行为并验证该函数在给定特定输入(也就是模拟的API响应)时的行为。那么,这种情况下,进行API测试时使用的测试用例可能会和单元测试中的用例有所重叠。 总的来说,对于哪些用例可能会在单元测试和集成测试之间产生重叠,这需要看你们团队对于“单元”定义的粒度。在一些团队中,他们也许会把调用API的函数作为一个单元进行测试。在这种情况下,集成测试的用例可能会和单元测试产生一些重叠。然而,这并不意味着进行集成测试是不必要的,毕竟在集成测试中,你可以验证API在与其他系统集成时的行为,而这是单元测试所无法覆盖的。