关于断言(assert)
断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。
使用断言可以创建更稳定、品质更好且 不易于出错的代码。当需要在一个值为FALSE时中断当前操作的话,可以使用断言。单元测试必须使用断言。以上为百度百科的说明。
断言,字面上的意思大致是十分肯定的说,也就是说我们相信这个结果是真的.如果我们的断言不为真,那这个这个结果就和我们预期的结果不一样.在编程上同理,如果程序运行出来的结果和你想要的结果不一致,那你的程序里面的这个方法或者函数就达不到你想要的需求,也就是说这个程序是有一些问题的.这是网上关于断言的一些解释.
其实我感觉,断言就像是一个if语句,如果结果和你的预期一样,那么OK,结果为真继续运行程序.如果结果和预期不符,那么程序会抛出一个系统级错误(不是异常),并且终止程序运行.例如下面这个单元测试.
主要是用来保证一些重要的运行步骤确实运行到位了,或者必要的操作确实执行,例如:你处理一个图像或者文本文件,那么你首先要导入这个图像或文本文件,然后再继续进行,这个时候就可以引入断言来判断以下是否真的导入进来了必要的文件,如果没有那么后续的程序运行都是没有意义的,因此断言在程序测试,和保证程序稳定性方面很有用。
int main (int argc, char* argv[])
{
ifstream in ("./examples/task2/correspondences.txt")
assert(in.is_open());
return 0;
}
上面这段程序在运行时如果确实把文本文件导入进来了就不会报错,否则就回报错,一般报错形式是:Assertion ‘ in.is_open() ’ failed.