来自 应用 2021-12-14 07:15 的文章

阿里云高防ip_苍云盾护_怎么办

阿里云高防ip_苍云盾护_怎么办

为什么嘲笑?不管您是否赞同测试驱动开发的测试优先方法,自动化单元测试的实践通常被视为提高软件质量的东西。通常,软件系统的某些部分相对容易进行单元测试:典型的可重用库和其他模块位于系统功能的边缘。然而,很难测试系统的核心功能、没有考虑到可测试性的遗留代码,或者与硬件行为相关的代码。在这些情况下,将功能隔离到可测试的小单元中并不总是容易的。其中一些问题可以通过重构代码来解决,但实际上这并不总是可能的(想想:诸如变更管理过程、重构所需的时间、重构当前未经单元测试的代码的风险等障碍)。非面向对象语言(如C)对于单元测试来说尤其具有挑战性,因为这种语言不提供接口原语来方便地在实际代码和测试工具代码之间转换。输入模拟函数,cc攻击怎么防御,模拟对象的过程语言版本("Endo测试:使用模拟对象进行单元测试",Mackinnon等人),它可以帮助您测试代码中这些难以触及的部分。在像C这样的过程语言中,分离出要测试的单元有几个困难:这样就可以独立地将软件和维护模块(定义为全局变量和系统变量)联系起来。将要测试的单元与它们调用的函数的行为隔离开来。模拟函数是一种解决隔离被测单元问题的技术。什么是模拟函数?模拟函数是一个非常简单的函数,它的行为由单元测试控制。cmockery提供了我见过的最简单的方法:单元测试简单地声明每个过程在这个测试期间,对于每个调用将返回什么。测试代码本质上提供了一个值队列,模拟函数需要返回值时将从中读取这些值。与其生成一个小的人工示例,不如看看一些真实的软件。下图显示了CodeSonar对开源bashshell程序(4.1版)的可视化效果,边缘表示函数之间的调用。我们可以在中间看到bashline.c中有很多核心功能,我们只需选择一个函数command洇subst_completion_function(),来演示模拟函数如何帮助我们进行单元测试。下图显示了我们所选函数的前向调用图的CodeSonar可视化。大多数直接调用的函数都是API函数,但rt_completion_match()和test_for_directory()除外。我们希望将command_subst_completion_function()与这些其他函数的行为隔离开来,这样(1)我们可以测试尽可能小的单元,(2)我们的单元测试不必链接到这些函数的实际实现(这可能会引入更多的依赖性,国外免费高防cdn,以此类推,直到您构建整个程序为止)。test_for_directory()实际上是一个文件静态函数,因此我们不能模拟它–我们必须模拟它调用的两个函数,file_is_dir()和bash_tilde_expand()(这两个函数都位于与函数分离的文件中)。下面是我们如何用cmockery来嘲笑它们:字符补全字符与u*const匹配,rl_compentry_func_t*entry_函数){return(char**)mock();} char*bash_tilde_expand(const char*s,int assign_p){return(char*)mock();}int文件\u isdir(char*fn){return(int)mock();}如果这些函数中有任何一个有"out"参数,我们也会将它们设置为mock()。mock()只是表示返回的值将由导致调用函数的单元测试指定。请记住,我们只对command_subst_completion_function()中的功能感兴趣,而不是它调用的函数。对于我们的函数,最简单的测试可能是没有命令完成匹配,cc防御验证,没有tilde扩展,也没有目录。如果不了解bash代码的任何细节,阿里云cdn能防御cc跟d吗,我们希望这样的测试看起来像这样:静态无效测试_命令_subst_完成_函数_简单(void**状态){//我们要"完成"的命令const char*我们的_命令="做某事";字符*结果;//此测试没有完成匹配项will\u return(rl_completion_matches,NULL);//没有要展开的颚化符将返回(bash_tilde_expand,千兆带宽ddos防御,strdup(我们的命令));//没有目录文件将返回(文件\u isdir,0);result=command_subst_completion_函数(我们的_命令,0);//既然我们没有提供任何扩展,我们应该得到相同的命令assert_true(strcmp(result,我们的命令)==0);}我们现在已经用最简单的方法"模拟"了我们所依赖的函数的行为。为了更好地测试command_subst_completion_function(),我们将继续生成提供不同模拟值的测试函数。结束还有很多其他的单元测试框架支持mocking(这篇Wikipedia上的很多都支持mocking),但是希望cmockery的这些简单示例能够说明为什么mock函数对于测试真实的程序是有用的。在这个小粒度上进行测试降低了所观察到的行为的复杂性,使得获得良好的测试覆盖率(在单元级别上输入和输出有更直接的关系)和查找错误的原因(因为针在被测单元的非常小的干草堆中)。引用单元测试实践调查的一个结论:"很难为与复杂系统状态或复杂系统环境交互的模块创建一个相关的测试环境。"基于模拟的单元测试提供了一种通过隔离程序功能来缓解这一困难的方法,尽管这仍然是有代价的在维护一个典型的C程序所附带的编译和链接时间依赖性方面要付出代价。 对自由静态分析和高级静态分析的区别感兴趣吗?看看我们的指南"高级静态分析C++"在这里:阅读指南hbspt.cta公司.\u relativeUrls=真;hbspt.cta.负荷(582328,'42fd5967-604d-43ad-9272-63d7c9d3b48f',{});