当前位置:  开发笔记 > 编程语言 > 正文

使用随机输入测试最佳实践

如何解决《使用随机输入测试最佳实践》经验,为你挑选了2个好方法。

注意:我提到接下来的几段作为背景.如果您只是想要TL; DR,请随意跳到编号问题,因为它们只是间接与此信息相关.

我正在编写一个python脚本,用POSIX日期(以及其他东西)做一些事情.单元测试这些似乎有点困难,因为可以遇到如此广泛的日期和时间.

当然,尝试测试每一个可能的日期/时间组合是不切实际的,所以我想我会尝试一个随机化输入的单元测试,然后报告测试失败时的输入.从统计学的角度来说,我认为如果我试图考虑所有潜在的问题区域(由于缺少的东西)或测试所有情况(由于纯粹的不可行性),我可以实现更多的测试完整性,假设我运行它足够的时间.

所以这里有几个问题(主要与上述内容间接相关):

    什么类型的代码是随机测试的理想候选者?什么类型的代码不是?

    如何确定使用随机输入运行代码的次数?我问这个是因为我想要一个足够大的样本来确定任何错误,但是不想等待一周才能得到我的结果.

    这些类型的测试是否非常适合单元测试,还是有其他类型的测试可以很好地适应?

    做这种事还有其他最佳做法吗?

相关话题:

单元测试中的随机数据?

Jon Skeet.. 12

我同意Federico的意见 - 随机测试会适得其反.如果测试不能可靠地通过或失败,则很难修复并知道它是固定的.(当然,当你引入不可靠的依赖时,这也是一个问题.)

但是,您可能希望确保以其他方式获得良好的数据覆盖率.例如:

确保您在1900年到2100年之间每年的每个月的开始,中间和结束都有测试(当然,如果这些测试适合您的代码).

如果知道的话,可以使用各种文化或"所有文化".

尝试"第0天"和"每个月结束后的一天"等.

简而言之,仍然尝试很多值,但是以编程方式和可重复的方式执行.您不需要在测试中尝试成为文字的每个值 - 可以循环测试的一个轴的所有已知值,等等.

你永远不会得到完整的报道,但它至少是可重复的.

编辑:我敢肯定有哪里随机测试是非常有用的地方,虽然可能不是单元测试.但是,在这种情况下,我想提出一些建议:使用一个RNG创建一个随机但已知的种子,然后使用该值播种新的RNG - 并记录它.这样,如果发生了一些有趣的事情,您能够通过使用已记录的种子启动RNG来重现它.



1> Jon Skeet..:

我同意Federico的意见 - 随机测试会适得其反.如果测试不能可靠地通过或失败,则很难修复并知道它是固定的.(当然,当你引入不可靠的依赖时,这也是一个问题.)

但是,您可能希望确保以其他方式获得良好的数据覆盖率.例如:

确保您在1900年到2100年之间每年的每个月的开始,中间和结束都有测试(当然,如果这些测试适合您的代码).

如果知道的话,可以使用各种文化或"所有文化".

尝试"第0天"和"每个月结束后的一天"等.

简而言之,仍然尝试很多值,但是以编程方式和可重复的方式执行.您不需要在测试中尝试成为文字的每个值 - 可以循环测试的一个轴的所有已知值,等等.

你永远不会得到完整的报道,但它至少是可重复的.

编辑:我敢肯定有哪里随机测试是非常有用的地方,虽然可能不是单元测试.但是,在这种情况下,我想提出一些建议:使用一个RNG创建一个随机但已知的种子,然后使用该值播种新的RNG - 并记录它.这样,如果发生了一些有趣的事情,您能够通过使用已记录的种子启动RNG来重现它.



2> Federico A. ..:

关于第3个问题,我认为随机测试适合单元测试.如果应用于同一段代码,则单元测试应始终成功,或始终失败(即,由于错误导致的错误行为应该是可重现的).但是,您可以使用随机技术生成大型数据集,然后在单元测试中使用该数据集; 这没什么不对.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有