首页 / 知识
关于c ++:测试用例VS ASSERTION语句
2023-04-12 13:56:00

Test Cases VS ASSERTION statement在我的大多数C ++项目中,我大量使用ASSERTION语句,如下所示:
但是TDD社区似乎喜欢做这样的事情:
仅凭我的经验,我便消除了许多细微的错误。 "谷歌"(Google)-他们将"第一方法"与"背着救生衣走到岸上,没有任何安全保护措施游动海洋"进行比较。
哪一个更好? 以我(有限)的经验,第一个选择要安全得多。在一个测试用例中,您仅测试预定义的输入并比较结果,只要检查了每个可能的边缘用例,这就可以很好地工作。第一个选项仅检查每个输入,从而测试"实时"值,它可以快速真正过滤掉错误,但是会带来性能损失。 史蒂夫·麦康奈尔(Steve McConnell)在《代码完成》中向我们学习,第一种方法可以成功地用于滤除调试版本中的错误。在发行版构建中,您可以过滤掉所有断言(例如,带有编译器标志)以获取额外的性能。 我认为最好的方法是同时使用两种方法: 方法1捕获非法值
和方法2测试算法的边缘情况。
两种机制都有其价值。任何体面的测试框架无论如何都会捕获标准的assert(),因此导致断言失败的测试运行将导致测试失败。 我通常在每个c ++方法的开头都有一系列断言,并带有注释" // preconditions";这只是对我期望对象在调用该方法时所具有的状态的完整性检查。它们很好地与任何TDD框架吻合,因为它们不仅在您测试功能时在运行时起作用,而且在测试时也起作用。 您的测试包没有理由不能捕获诸如doMoreWonderfulThings中的断言。这可以通过让ASSERT处理程序支持回调机制来完成,或者您的测试断言包含try / catch块。 在C ++中,使用大多数测试框架时,我更喜欢方法2。通常,它使故障报告更容易理解。在编写测试后数月至数年的测试中,这是无价的。 我的理由是,大多数C ++测试框架都会在没有任何类型的堆栈跟踪信息的情况下打印出断言所在的文件和行号。因此,大多数情况下,您将在函数或方法内部而不是在测试用例内部获得报告行号。 即使断言被捕获并从调用者处重新断言,报告行也会与catch语句一起出现,并且可能不在靠近调用已断言的方法或函数的测试用例行的任何地方。当断言的功能可能在测试用例中多次使用时,这可能会很烦人。 但是也有例外。例如,Google的测试框架具有范围限定的跟踪语句,如果发生异常,该语句将作为跟踪的一部分打印。因此,您可以使用跟踪范围包装对通用测试函数的调用,并在一两行之内轻松告诉确切测试用例中的哪一行失败。 我不知道您指的是哪个特定的TDD子社区,但是我遇到的TDD模式要么使用Assert.AreEqual()获得肯定的结果,要么使用ExpectedException机制(例如.NET中的属性)来声明应该观察到的错误。 |
最新内容
相关内容
python如何无限循环语句
python如何无限循环语句,异常,培训,语句,程序,单片机,下面,以上,语言,发生,功能,python的无限循环语句何为循环:在编程中,一个无法靠自身的控制pythonfor语句怎么写
pythonfor语句怎么写,培训,项目,嵌套,内层,外层,循环体,序列,变量,语句,示例,pythonfor循环可以遍历任何序列的项目,如一个列表或者一个字符串python一行多条语句怎么写
python一行多条语句怎么写,培训,代码,情况,语句,括号,末尾,空格,字符串,也就是,下面,在实际的开发过程中,换行编写代码是经常遇到的情况,下面来pythonpass语句是什么意思
pythonpass语句是什么意思,培训,语句,程序,个位,整数,情形,上面,事情,以上,更多,很多程序都提供了“空语句”支持,Python也不例外,Python的passpython为什么print语句打印不出来
python为什么print语句打印不出来,培训,语句,逗号,字符串,对象,函数,文件,方法,下文,实例,Python中print语句主要是向屏幕打印输出的。在pythpythonif语句怎么嵌套
pythonif语句怎么嵌套,代码,培训,车辆,嵌套,语句,驾驶员,酒精,含量,表达式,血液,python中if语句有三种结构,即if、ifelse和ifelifelse,这3种条python循环执行语句怎么写
python循环执行语句怎么写,培训,项目,语句,条件,序列,双数,括号,后跟,字符串,语法,python编程中while语句用于循环执行程序,即在某条件下,循环python写python语句可以用什么编辑
python写python语句可以用什么编辑器,培训,代码,系统,灵活,项目,语句,插件,文本,得心应手,快捷键,一个好的编辑器,写python代码时更加得心应手pythonfor循环语句怎么写
pythonfor循环语句怎么写,数据,培训,项目,语句,循环体,实例,教程,时会,字符串,序列,pythonfor循环可以遍历任何序列的项目,如一个列表或者一个pythonelif语句报错是什么原因
pythonelif语句报错是什么原因,培训,语句,数据,条件,程序,结果,内容,变量,使用方法,更多,python的else和elif语句也可以叫做子句,因为它们不能python输出语句怎么用
python输出语句怎么用,培训,数据,庞大,代码,语句,字符串,逗号,函数,对象,文件,Python中输出语句是print语句1.逗号分隔符在Python中print语句python如何使用return语句
python如何使用return语句,地址,位置,情况,培训,函数,分析,控制权,地方,变量,语句,return语句就是讲结果返回到调用的地方,并把程序的控制权一