这是一个我认为应该存在的程序:当应用程序运行时,它会自动记录对所有方法的所有调用。然后它根据每个调用创建一个测试。 (这样的测试可能被称为单元测试,但我在这里没有这样做,因为存在捕获状态的问题。)
对于一个典型的应用程序,该程序只需几次使用该程序即可自动生成成千上万的测试。
这个程序存在吗?如果没有,为什么不呢?是否有一个程序可以做到这一点?
该程序的更复杂版本将执行以下操作:
我很欣赏这样一个实用程序生成的一些测试不正确的事实。尽管如此,我认为这样的实用程序非常有用,特别是在测试遗留应用程序时。
答案 0 :(得分:2)
有类似的工具,但它们基于捕获用户输入并重放它。
您所描述的内容IMO不是很有用,因为以这种方式生成的测试不会测试所需的行为,而只是现有的行为。即使这是错的。即使这是一个无关紧要的实施细节。这些测试非常脆弱且极其冗余 - 即它们缺乏自动化测试中最重要的两个属性:稳定性和独立性。
应用程序的任何更改,任何重构都会导致数千次破坏测试。最终结果可能是一个被抛弃和被忽略的测试套件,或者是一个及时冻结的应用程序,任何人都无法以任何方式改变动机,因为它需要调整测试用例的10倍工作量。
这会扰乱创建的调用 新的测试。例如:一种方法是 用两个整数(1,2)调用。这个 实用程序将创建调用的测试 用(0,2),(1,3),(0,3)的方法, 等
该工具如何知道这些生成的调用应该具有什么效果? Fuzz testing是一个类似的概念,但不测试应用程序的正确性,只是没有缓冲区溢出和类似的灾难性错误。
答案 1 :(得分:0)
在3D图形世界中,它们以类似的方式存在 - 它们记录所有API调用,您可以稍后“播放”它们并获得完全相同的帧序列等。
我不明白为什么你提到的实用程序需要创建额外的测试((1,A)业务)。 (2,B)是否是有效的组合?方法记录本身就是一个很好的想法,而不需要重新组合。
答案 2 :(得分:0)
如果您正在对Web应用程序进行功能测试,可以使用Selenium等可用的框架在浏览器中记录用户输入,并可以将其重播以用于测试目的。