assert

26. 什么是单元测试

◇◆丶佛笑我妖孽 提交于 2020-02-28 06:45:54
在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。 上面这段内容摘自维基百科。可能有很多同学搞不明白什么是单元测试。即使搜了很多资料,也还是搞不明白。大家可能对单元测试有一个误解,觉得单元测试是开发做的,跟测试同学扯不上关系,实际上单元测试不管是开发还是测试同学都可以做。笔者将用自己的理解来解释一下什么是单元测试。同时下面也会给出例子让大家更深入了解什么是单元测试。比如我们现在有一个加法函数,需要我们输入两个值,那么我们怎么保证我们写的函数是没有问题的呢?是不是要调用这个函数,然后传入两个值,查看返回值是否正确?其实这就是在做单元测试。当然我们没有用规范的做法去做单元测试,那么什么是规范的方法呢?下面我将会以代码形式举例进行介绍。还是用加法函数来进行举例。如下面代码所示: def add(a, b): return a + b print(add(1, 3)) 我们已经定义一个add函数,现在调用add函数,传入1和3,然后把返回值进行打印,通过打印我们发现打印的结果为4,可以初步这个函数是没问题的

Using Java Assertions

风流意气都作罢 提交于 2020-02-27 21:22:06
1. Introduction The Java assert keyword allows developers to quickly verify certain assumptions or state of a program. In this article, we'll take a look at how to use the Java assert keyword. 2. History of Java Assertions The Java assert keyword was introduced in Java 1.4, so it's been around for quite a while. However, it remains a little-known keyword that can drastically reduce boilerplate and make our code more readable. For example, often times in our code we need to verify certain conditions that might prevent our application from working properly. Typically we'd write something like

面试题整理:何时使用assert

馋奶兔 提交于 2020-02-27 19:54:33
请问在什么情况下会使用assert? assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。 一般来说,assertion用于保证程序最基本、关键的正确性.assertion检查通常在开发和测试时开启.为了提高性能,在软件发布后,assertion检查通常是关闭的。断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为true;如果表达式的值为false,那么系统会报告一个AssertionError。断言使用代码如下: assert(a > 0); // throws an AssertionError if a <= 0 断言可以有两种形式: assert Expression1; //Expression1 应该总是产生一个布尔值 assert Expression1 : Expression2 ; //当Expression1为true的时候后面Expression2被忽略,如果false的话,后面的表达式的结果会被计算出来并作为AssertionError得构造器参数 要在运行时启用断言

顺序栈的c语言实现和OOP实现

。_饼干妹妹 提交于 2020-02-27 17:02:58
目录 C语言实现顺序栈和OOP实现顺序栈 1,顺序栈 2,C语言实现顺序栈 3,用OOP实现一个顺序栈 C语言实现顺序栈和OOP实现顺序栈 1,顺序栈 (1)定义:栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 (2)栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。 (3)图解: 2,C语言实现顺序栈 #include<stdio.h> #include<assert.h> #define STACK_LEN 5 typedef struct Sqstack { int elem[STACK_LEN]; int top;//当前可存放数据的下标 }Sqstack,*Pstack; void InitStack(Pstack ps) { assert(ps!=NULL); ps->top=0; }

C11关键字_Static_assert

拥有回忆 提交于 2020-02-27 15:49:08
C11新增关键字_Static_assert  C11标准新增了一个关键字_Static_assert,下面来介绍一下它的相关用法和注意事项。 用法  和C11以前的断言assert()表达式有些类似。assert()表达式是在运行时检查。而C11新增的_Static_assert声明可以在编译时检查assert()表达式。因此,assert()可以导致正在运行的函数中止,而_Static_assert()可以在导致程序无法通过编译。_Static_assert()接受两个参数。第一个参数是一个整型常量表达式,第二个参数是一个字符串。如果第一个表达式求值为0(或_False),编译会显示字符串,而且不编译该程序。 例程 下面是一个使用_Static_assert的例程: #include <stdio.h> #include <limits.h> _Static_assert(CHAR_BIT == 16, "16-bit char falsely assumed"); int main(void) { puts("char is 16 bits."); return 0; }  编译结果 statasrt.c:4:1:Error:static assertion failed: "16-bit char falsely assumed" _Static_assert(CHAR

spring的断言工具类Assert的基本使用

点点圈 提交于 2020-02-27 15:02:02
Assert(断言)   Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回。类似的,当我们在编写类的方法时,也常常需要对方法入参进行合 法性检查,如果入参不符合要求,方法将通过抛出异常的方式拒绝后续处理。举一个例子:有一个根据文件名获取输入流的方法:InputStream getData(String file),为了使方法能够成功执行,必须保证 file 入参不能为 null 或空白字符,否则根本无须进行后继的处理。这时方法的编写者通常会在方法体的最前面编写一段对入参进行检测的代码,如下所示: public InputStream getData(String file) { if (file == null || file.length() == 0|| file.replaceAll("\\s", "").length() == 0) { throw new IllegalArgumentException("file入参不是有效的文件地址"); } … }   类似以上检测方法入参的代码是非常常见,但是在每个方法中都使用手工编写检测逻辑的方式并不是一个好主意。阅读 Spring 源码,您会发现 Spring 采用一个 org.springframework.util.Assert 通用类完成这一任务。   Assert

chai断言的学习总结

非 Y 不嫁゛ 提交于 2020-02-26 14:51:23
chai API 新手指南 带着几个问题去学习? 什么是TDD 和BDD 有几种常用的断言方式 chai断言方式使用方法 它们的区别是什么 TDD和BDD是什么? TDD:测试驱动开发(Test-Driven Development)测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD的基本思路就是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。TDD首先考虑使用需求(对象、功能、过程、接口等),主要是编写测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证。 BDD:行为驱动开发(Behavior Driven Development)行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。主要是从用户的需求出发,强调系统行为。BDD最初是由Dan North在2003年命名,它包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。 有几种断言方式 有三种常用的方式:assert|expect|should chai断言方式使用方法 声明 var chai = require('chai'); var assert = chai

分支循环

情到浓时终转凉″ 提交于 2020-02-26 12:53:25
①条件表达式(三元操作符) x,y=4,5 if x<y: small=x else: small=y 例子可以改进为: small=x if x<y else y ②assert关键字我们称之为断言,当这个关键字后面的条件为假时,程序自动崩溃并抛出AssertionError的异常 >>> assert 3>4 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> assert 3>4 AssertionError 我们可以用它在程序中置入检查点,确保程序中的某一个条件一定为真才能让程序正常工作 ③for循环 for 目标 in 表达式:   循环体 >>> favourite='fish' >>> for i in favourite: print(i,end=' ') f i s h >>> member=['花草','虫','鱼'] >>> for each in member: print(each,len(each)) 花草 2 虫 1 鱼 1    ③range 语法range(start,stop,step) start,step是可选的,step默认值是1,start默认值为0 >>> list(range(5)) [0, 1, 2, 3, 4] >>> for i

14、预处理宏

给你一囗甜甜゛ 提交于 2020-02-26 12:38:27
预处理宏 预处理器( Preprocessor )定义了读取源代码、对代码预先翻译以及编写供编译器读取的新代码的过程。预处理先于编译器对源代码进行处理。 C/C++ 语言没有内置工具在编译时间包含其他源文件、宏定义,或根据条件包含或排除一些代码行的编译时指令。预处理器提供了这些能力。虽然当前大多数编译器内部集成了预处理器,人们还是认为预处理独立于编译器的过程。预处理器读取源代码,查找预处理指令语句和宏调用,然后翻译源代码,它还去掉程序中的注释和多余的空白。 在 C++ 语言中预处理指令有: 指令 功能描述 # 空指令,没有作用 #include 在指令的位置包含一个源代码文件 #define 定义一个宏 #undef 取消宏定义 #if 如果给定条件为真,则编译代码 #ifdef 如果宏被定义,则编译代码 #ifndef 如果宏未被定义,则编译代码 #elif 如果前面的 #if... 条件不为真而当前条件为真,则编译代码 #endif 终止 #if....#else 条件块 #error 终止编译并显示错误信息 #line 修改编译器尾部用于消息报告的文件名和行号 #pragma 功能取决于平台 "#" 串化运算符 宏定义内的 "#" 运算符把位于其后的形参所对应的实参转化为字符串。 例子: #include <iostream.h> #define Error(n) cout

纯numpy 实现 简易回归网络 (前向传递、反向传递、更新参数)

◇◆丶佛笑我妖孽 提交于 2020-02-25 22:43:04
文章目录 代码 ./utils.py ./main.py 运行截图 觉得好就点个赞吧~ 代码 ./utils.py import numpy as np def fc_forward ( x , w , b ) : """z = x @ w + b 全连接层(full connect)的前向传播""" assert w . shape [ 0 ] == x . shape [ 1 ] assert w . shape [ 1 ] == b . shape [ 0 ] return np . matmul ( x , w ) + b def fc_backward ( x , w , z_grad ) : """z = x @ w + b 全连接层的反向传播""" # x @ w = z # -> z.shape = x.shape[0], z.shape[1] assert z_grad . shape [ 0 ] == x . shape [ 0 ] assert z_grad . shape [ 1 ] == w . shape [ 1 ] x_grad = z_grad @ w . T w_grad = x . T @ z_grad b_grad = np . mean ( z_grad , 0 ) return x_grad , w_grad , b_grad def