assert

Nunit单元测试基础知识

隐身守侯 提交于 2020-02-09 08:39:36
推行单元测试的目的: 1、 减少BUG提高项目的质量 2、 养成良好的编码习惯,提高开发人员编码水平 要测什么What? 最小的可测试软件元素(单元) , 包括单元的内部结构(如逻辑和数据流)以及单元的功能和可观测的行为 . 由于开发方式的不同,单元测试一般划分方法如下: 1. 面向对象的软件开发:以 Class( 类 ) 作为测试的最小单元。以方法的内部结构作为测试的重点。 2. 结构化的软件开发:以模块(函数、过程)作为测试的最小单元。 如何测试 How? 白盒测试方法:测试单元的内部结构, Nunit Nmock 黑盒测试方法:测试单元的功能和可观测的行为 《通用测试用例》 步骤: 一、 如何设计单元测试 需要弄清楚被测试代码实现的功能和相应的逻辑关系; If…else… Switch..case… While... 同时还要考虑到测试的输入内容,以及返回的结果; 用例的设计要保证面面俱到,是否覆盖了每一条路径。 而如何做到面面俱到这就需要恶我们对每个函数进行详细的分析,将分析和讨论的结果归入相关的测试库中。初期工作的进度慢并不要紧,只要能做得很详细对于以后的测试还是有很大的帮助。或许以后的测试中,只要直接调用原来写过的测试类库,修改部分简单的语句就可以实现新模块的单元测试了 [TestFixture] 表示:类包含了测试代码(这个特性可以被继承)。这个类必须是 公有 的

[Visual Studio] 开启Visual Studio 2012通过右键菜单创建单元测试(Unit Test)

别说谁变了你拦得住时间么 提交于 2020-02-09 08:31:37
关于单元测试,如果不会用可以参照我的上篇博文———— 在Visual Studio 2012使用单元测试 首先分享一篇博文, [Visual Studio] 开启Visual Studio 2012通过右键菜单创建单元测试(Unit Test) 。 泛型有两种,一般泛型与类型约束泛型,在对包含泛型的方法进行单元测试中也可以这么分,详情可参阅http://msdn.microsoft.com/en-us/library/vstudio/ms243401.aspx 。从该页面可以知道,关于泛型的单元测试,微软类库(Microsoft.VisualStudio.TestTools.UnitTesting)提供了类“GenericParameterHelper”帮助我们编写Unit Test代码。 首先看下非类型约束的一个demo,我就直接上代码了 public static bool IsCollectionEmpty<T>(ICollection<T> collection) { return collection == null || collection.Count < 1; } 测试代码 /// <summary> ///IsCollectionEmpty 的测试 ///</summary> public void IsCollectionEmptyTestHelper<T>()

你学会测试了吗(3):测试语法之断言介绍

柔情痞子 提交于 2020-02-09 08:28:48
前言 这个简短的系列一一讲解一下.Net下测试的相关知识,希望对初学者有所帮助。 在这个系列 第一篇 中从测试工具入手推荐TestDriven.NET。官方下载TestDriven.NET-2.14.2190 Beta版 (直接下载) 和TestDriven.NET-2.13.2184正式版 (直接下载) 。 第二篇 中我选择了最为经典的NUnit单元测试框架来介绍TestDriven.NET所支持的一些重要的属性。这一篇继续使用这个框架,介绍单元测试的核心——断言Assert。 概述 在测试框架中,断言是单元测试的核心,我们在测试中要对其程序断言,如果某个断言失败,方法的调用不会返回值,并且会报告一个错误。如果一个测试包含多个断言,那些紧跟失败断言的那些断言都不会执行,因此每个测试方法最好只有一个断言。 下面看看NUnit框架吧,来2张图: 断言 现在,我们使用经典的NUnit框架的最新版本,可以用三种方法来写我们的断言: 标准模式 :过去比较经典的写法。这些方法在NUnit.Framework命名空间下的Assert类中以静态方法提供,对其不同的类型(字符串、集合、文件)NUnit.Framework框架还提供了字符串断言、集合断言、文件断言。 约束模式 :全新的写法,使用Assert.That()方法来约束扩展所有的断言,使用新增NUnit.Framework

SpringBoot 单元测试利器——Mockito

孤者浪人 提交于 2020-02-08 20:20:49
Mockito 是一种 Java mock 框架,他主要是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean、模拟方法的返回值、模拟抛出异常...等,在了解 Mockito 的具体用法之前,得先了解什麽是 mock 测试 1. 什么是 mock 测试? mock 测试就是在测试过程中,创建一个假的对象,避免你为了测试一个方法,却要自行构建整个 bean 的依赖链 像是以下这张图,类 A 需要调用类 B 和类 C,而类 B 和类 C 又需要调用其他类如 D、E、F 等,假设类 D 是一个外部服务,那就会很难测,因为你的返回结果会直接的受外部服务影响,导致你的单元测试可能今天会过、但明天就过不了了 而当我们引入 mock 测试时,就可以创建一个假的对象,替换掉真实的 bean B 和 C,这样在调用B、C的方法时,实际上就会去调用这个假的 mock 对象的方法,而我们就可以自己设定这个 mock 对象的参数和期望结果,让我们可以专注在测试当前的类 A,而不会受到其他的外部服务影响,这样测试效率就能提高很多 2. Mockito 简介 说完了 mock 测试的概念,接下来我们进入到今天的主题,Mockito Mockito 是一种 Java mock 框架,他主要就是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean、模拟方法的返回值

java bean 属性验证框架 valid

回眸只為那壹抹淺笑 提交于 2020-02-06 16:25:25
项目介绍 java 开发中,参数校验是非常常见的需求。 但是 hibernate-validator 在使用过程中,依然会存在一些问题。 特性 支持 fluent-validation 支持 jsr-303 注解 支持 i18n 支持用户自定义策略 支持用户自定义注解 开源地址 valid 创作目的 hibernate-validator 无法满足的场景 如今 java 最流行的 hibernate-validator 框架,但是有些场景是无法满足的。 比如: 验证新密码和确认密码是否相同。(同一对象下的不同属性之间关系) 当一个属性值满足某个条件时,才进行其他值的参数校验。 多个属性值,至少有一个不能为 null 其实,在对于多个字段的关联关系处理时,hibernate-validator 就会比较弱。 本项目结合原有的优点,进行这一点的功能强化。 validation-api 过于复杂 validation-api 提供了丰富的特性定义,也同时带来了一个问题。 实现起来,特别复杂。 然而我们实际使用中,常常不需要这么复杂的实现。 valid-api 提供了一套简化很多的 api,便于用户自行实现。 自定义缺乏灵活性 hibernate-validator 在使用中,自定义约束实现是基于注解的,针对单个属性校验不够灵活。 本项目中,将属性校验约束和注解约束区分开,便于复用和拓展。

AutoMapper之投影

谁都会走 提交于 2020-02-06 06:43:34
7.投影 AutoMapper有一种自定义映射,叫投影。接下来我们通过一个示例来了解它 7.1示例 //源对象 public class CalendarEvent { public DateTime Date { get; set; } public string Title { get; set; } } //目标对象 public class CalendarEventForm { public DateTime EventDate { get; set; } public int EventHour { get; set; } public int EventMinute { get; set; } public string Title { get; set; } } 映射说明:把日期拆开分别映射到不同字段 CalendarEvent中属性 说明 CalendarEventForm的属性 Date Date中的年月日-> EventDate Date Date中小时-> EventHour Date Date中分钟-> EventMinute [TestClass] public class Projection { [TestMethod] public void ProjectionTest() { var calendarEvent = new

C++ 内存模型

余生颓废 提交于 2020-02-06 03:19:45
C++ std::atomic 原子类型 原子操作:一个不可分割的操作。 标准原子类型可以在 头文件之中找到,在这种类型上的所有操作都是原子的。它们都有一个 is_lock_free() 的成员函数,让用户决定在给定类型上的操作是否用原子指令完成。唯一不提供 is_lock_free() 成员函数的类型是 std::atomic_flag ,在此类型上的操作要求是无锁的。可以利用 std::atomic_flag 实现一个简单的锁。 #include <iostream> #include <thread> #include <atomic> #include <assert.h> class spinlock_mutex { public: spinlock_mutex() : flag_(ATOMIC_FLAG_INIT) { } void lock() { while(flag_.test_and_set(std::memory_order_acquire)) ; } void unlock() { flag_.clear(std::memory_order_release); } private: std::atomic_flag flag_; }; int value = 0; spinlock_mutex mutex; void test_function() {

assert_param 函数,断言

寵の児 提交于 2020-02-04 23:23:45
在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。在固件库中,它的作用就是 检测传递给函数的参数是否是有效 的参数。 这是一种常见的软件技术,可以在调试阶段帮助程序员快速地排除那些明显的错误。它确实在程序的运行上牺牲了效率(但只是在调试阶段),但在项目的开发上却帮助你提高了效率。 当你的项目开发成功,使用release模式编译之后,或在stm32f10x_conf.h文件中注释掉对USE_FULL_ASSERT的宏定义,所有的assert_param()检验都消失了,不会影响最终程序的运行效率。 assert_param函数在 stm32f0xx_conf.h 库函数中定义: /* Exported types ------------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/ /* Uncomment the line below to expanse the "assert_param" macro in the Standard Peripheral Library drivers code */ /* #define

Python中文繁简体转换工具

霸气de小男生 提交于 2020-02-04 20:58:36
Openccpy ___ _____ __ ___ ___ ___ _____ __ __ / __`\/\ '__`\ /'__`\/' _ `\ /'___\ /'___\/\ '__`\/\ \/\ \ /\ \L\ \ \ \L\ \/\ __//\ \/\ \/\ \__//\ \__/\ \ \L\ \ \ \_\ \ \ \____/\ \ ,__/\ \____\ \_\ \_\ \____\ \____\\ \ ,__/\/`____ \ \/___/ \ \ \/ \/____/\/_/\/_/\/____/\/____/ \ \ \/ `/___/> \ \ \_\ \ \_\ /\___/ \/_/ \/_/ \/__/ OpenccPy 是一款 python 中文繁简体转换工具。 特性 支持中文繁简体转换 Quick Start 环境要求 Python 3.X install pip install openccpy 使用案例 # coding=utf-8 from openccpy.opencc import * class TestOpencc(object): """ 核心转换测试类 """ def test_to_simple(self): """ 测试转换为简体 """ assert "丝" == Opencc.to_simple("絲")

groovy中的闭包

妖精的绣舞 提交于 2020-02-03 22:46:51
groovy中的闭包 闭包是非常重要的,在groovy中,闭包是最有用的特性之一 闭包就是一个代码块,一个闭包相当于是一个定义好的方法 简单的例子 迭代 闭包如果只有一个参数的话,我们可以使用隐藏参数it来表示,省略了-> Closure c = { println "$it" } [ 1 , 2 , 3 ] . each ( c ) 处理资源 file的eachLine方法负责处理文件输入流的打开和关闭,这样避免你偶然的错误处理形成资源泄漏。 new File ( 'myfile.txt' ) . eachLine { println it } 声明闭包 我们可以在调用的时候传入闭包 . eachLine { println it } 可以提前声明好闭包,在调用的时候传入 Closure c = { println "$it" } 引用一个方法作为闭包,这个引用的闭包甚至可以重载 使用.&即可把一个实例的方法声明成一个闭包 class MethodClosure { int compare ( int x , int y ) { return x <= > y } int compare ( List list ) { return list . size ( ) } } def m = new MethodClosure ( ) def c1 = m . & compare