stub 与 mock 的区别

stub 与 mock 的区别 关键字: stub, mock, test, tdd 有些东西就是这样,有些东西你心理面很明白,可是当你要给别人讲的时候却发现有一点点困难。 关于Stub & Mock的确别,我的理解是: 1.先说不同点: Stub方法里面需要实现逻辑,因为对Stub的调用者需要依赖,stub模块或函数的返回值,正因为此,搭建stub跟mock比起来,是比较耗费精力的。也正因为此,stub一般用于粗粒度测试。 而mock的关键则是他要足够啥,只要能够...
技术 | 2010-09-22 01:30 | 阅读 5943 次 | 评论 2 条

Windows Socket五种I/O模型——代码全攻略

如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的。Windows操作系统提供了选择(Select)、异步选择(WSAAsyncSelect)、事件选择(WSAEventSelect)、重叠I/O(Overlapped I/O)和完成端口(Completion Port)共五种I/O模型。每一种模型均适用于一种特定的应用场景。程序员应该对自己的应用需求非常明确,而且综合考虑到程序的扩展性和可移植性等因素,作出自己的选择。 我会以一个回应反射式服务器(与《Windows网络编程》第八章一样)来介绍这五种I/O模型。我们假设客户端的代码如下(为代码直观,省去所有...
数据结构 | 2010-09-11 11:20 | 阅读 1528 次 | 评论 0 条

崩溃地址 程序调试

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle...
基础知识 | 2010-09-07 01:28 | 阅读 1711 次 | 评论 0 条

Windows动态库与Linux共享对象比较

摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程 序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。但不同操作系统的动态库由于格式不同,在需要不同操作系统调用时需要进行动态库程序移 植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。   关键词:动态链接库 Linux编程 程序移植   1 引言    动态库(Dynamic Link Library abbr,DLL)技术是程序设计中经常采用的技...
基础知识 | 2010-09-05 03:26 | 阅读 1608 次 | 评论 0 条

gcc 汇编示例

/** * hello_asm_reg.c -- a demo for printing "Hello, Gcc Inline Assembly World!n" in gcc inline assembly * */int main(void){ char *str="Hello, Gcc Inline Assembly World!n"; __asm__ __volatile__ ( "pushl %%edx\n" "call puts\n" : :"d"(str) ); return 0;}
基础知识 | 2010-08-18 01:25 | 阅读 3358 次 | 评论 7 条

C++实用技巧--单元测试实现

复杂的东西写多了,如今写点简单的好了。由于功能上的需要,Vczh Library++3.0被我 搞得很离谱。为了开发维护的遍历、减少粗心犯下的错误以及增强单元测试、回归测试和测试工具,因此记录下一些开发上的小技巧,以便抛砖引玉,造福他人。欢 迎高手来喷,菜鸟膜拜。 之前的文章讲了指针和内存的一些问题,今天说一下单元测试的问题。如果在团队里面没有对单元测试的框架有要求的 话,其实我们可以使用一个最简单的方法来搭建在IDE里面运行的单元测试框架,整个框架只需十几行代码。我们先来考虑一下功能最少的单元测试框架需要完成 什么样的内容。首先我们要运行一个一个的测试用例,其次在一个测试...
技术 | 2010-08-17 01:48 | 阅读 1977 次 | 评论 1 条

多核情况下添加新中断的方法

原创】多核机器下添加新中断的方法【文章标题】: 多核情况下添加新中断的方法【文章作者】: chimney--------------------------------------------------------------------------------【详细过程】 中断向量表的修改应该都很熟悉了,combojiang大侠在他的rootkit hook系列文章里将的很详细了。但是combojiang文章 中有关IDT的代码都是在单核机器中实现的,如果你有个双核的机子,你正好又学习了combojiang大大的文章,你就会发现出 问题了。因为每个CPU 都有自己的...
技术 | 2010-08-14 22:34 | 阅读 2218 次 | 评论 0 条

shell脚本中的include

// utils.sh 文件#!/bin/shfunction colored_print(){ echo "colored print" echo "============================================" abc &> /dev/null}// test.sh文件#!/bin/sh#导入头文件. ./utils.shcolored_print
基础知识 | 2010-08-14 22:22 | 阅读 4623 次 | 评论 0 条

小型的面向ANSI C的函数调用关系分析程序(python)

logiscope要求被分析的程序是一个完整的可编译的项目。而我希望可以对数个,至多几十个,且不是一个完整项目的C代码进行函数调用关系图。logiscope无法完成。logiscope要求完整的项目是因为它希望得到一个准确的call graph,而我只希望 可以方便的得到call graph,就所不太准确也没有关系。事实上,如果代码不是完整的项目,的确是会得到有错误的call graph。但对于一些临时性分析代码的任务,或者是无法得到一个很大项目全部代码时,进行部分代码的分析也是必要的。部门的专业人员建议使用打桩的方法使部分代码变成一个仅可编译的,在编译层面上是完整的代码,以规避...
实例 | 2010-08-14 21:00 | 阅读 2688 次 | 评论 0 条

大数的阶乘算法

// 目前我看到最短,速度最快的大整数阶乘纯C代码实现,如果有兴趣可以自己算算100000!// 原代码我只调整了下格式,想计算100000以上阶乘的请自己修改N的数值。#include <stdio.h>#define N 100000int n;int main(){ l: while(scanf("%d",&amp;n) != -1) { int s[N]={1},t=2,a=0,b=0,m=0; if(n<2) { puts("1"); goto l; }...
算法 | 2010-08-09 01:21 | 阅读 1314 次 | 评论 0 条

从字符串中提取数值( 包括浮点格式数据)

// 目的:从字符串中提取数值( 包括浮点格式数据)#include <stdio.h>#include <ctype.h>#include <math.h>#include <malloc.h>// 如果是小数点则必须保证这个位置的前面和后面中有有一个数字// 如果是负号则要求// 数据格式的限制(简化操作)// 必须保证是符号开始的或者数字开始的制,如果是负号,则后面一定是数字// 一直查询到非数字和小数点才结束int process(char *str,double *data){ int row = 0 ; for(int i=0;*(str+i)!='\0';i++...
算法 | 2010-08-08 11:07 | 阅读 1580 次 | 评论 0 条

对uchar 类型图象数据添加误码

// 10 -4,-5,-6 #include <string.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <stdio.h>#include <math.h>#include <dos.h>// 对uchar 类型图象数据添加误码void Add_Error_Code(char *in_fname,char *out_fname,short r,short c, double err_rate,short seed) { FILE *stream; unsigned cha...
图像 | 2010-08-08 11:01 | 阅读 2363 次 | 评论 2 条

算法专栏

/********************************************************\ *牛顿下山法 *非线性方程求根 *目标: *用牛顿下山法,求非线性方程x*x*x-x-1=0,的根。 *要求: *输入,初值,误差限,最大迭代次数,最大下山次数; *输出,近似根以及下山因子 *评价: *使用牛顿下山算法 目标就只能求出一个根 并且在初值附近. *因为算法只设计了一个出口.即X1-X0<E. 满足此条件 即结束 \*******************************************************/#include"iostr...
基础知识 | 2010-08-08 00:09 | 阅读 2162 次 | 评论 14 条

C语言中可变参数函数相关的一些偏方

C语言中有一种长度不确定的参数,形如:"…",它主要用在参数个数不确定的函数中,我们最容易想到的例子是printf函数。 原型: int printf( const char *format [, argument]… ); 使用例: printf("Enjoy yourself everyday!\n"); printf("The value is %d!\n", value); 这种可变参数可以说是C语言一个比较难理解的部分,这里会由几...
技术 | 2010-08-07 15:24 | 阅读 1702 次 | 评论 1 条

GCC的51项扩充的说明

http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/C-Extensions.html#C-Extensions是GCC的51项扩充的说明,若有时间,不妨一阅。 http://en.wikipedia.org/wiki/ISO_C它给出了C语言的定义。
数据结构 | 2010-08-06 18:14 | 阅读 2506 次 | 评论 1 条

Try-finally语句

Try-finally语句是微软对C语言做的 扩展(不通用),以保证某个代码段执行中断之时程序能够执行“清除”代码。“清除”代码主要用于执行释放内存、关闭文件以及释放文件句柄等任务。如果一个函数中有多 处需要进行错误检查,并且检查出错误后就需要从函数中退出,那么这时候try-finally语 句就显得格外有用。 try-finally语句语法: __try 复合语句 __finally 复合语句 __try后 面的复合语句是受保护的区域。__finally后面的复合语 句是终止处理语句。无论受保护区域是正常终止还...
基础知识 | 2010-08-05 00:24 | 阅读 1287 次 | 评论 0 条

&lt;&lt;导入表的获取与动态填充&gt;&gt;初步学习笔记

<<导入表的获取与动态填充>>初步学习笔记[1]导入表结构的获取<1.>获取PE基址 (IMAGE_DOS_HEADER)<2>.获取PE头部(IMAGE_NT_HEADERS32)<3>. 获取导入表的存储结构(IMAGE_NT_HEADERS32.OptionalHeader.DataDirectory[1])导出 表:IMAGE_NT_HEADERS32.OptionalHeader.DataDirectory[0]导入 表:IMAGE_NT_HEADERS32.OptionalHeader.DataDirectory[1]结构其实就是一个 IMAGE_DATA_DIRE...
技术 | 2010-08-05 00:00 | 阅读 1476 次 | 评论 0 条

API Hook的几种实现

API Hook的几种实现 所谓的API Hook,就是利用某种技术将API的调用转为我们自己定义的函数的调用。这种技术在实际项目里面的应用也是很广泛的。最近,我在做关于我们项目的自动化 测试的时候,就遇到了这种情况。在写测试代码之前,我们对测试代码有一些要求。1. 不能因为测试代码而修改原代码。2. 原有的模块是以dll格式输出的,在做测试的时候,要测的类和函数也只能使用dll的导出类或者函数,而不能将源文件重新编译。由于这些限制,导致测试用 例往往不能在普通的机器上运行。比如这样一个函数: <!--Code highlighting ...
技术 | 2010-08-02 23:13 | 阅读 2026 次 | 评论 1 条

互斥锁,条件变量的多生产者,单消费者简单…

//2010-01-19 yaojianming 摘自unix网络编程2// 编译:g++ luts.cpp -o luts -lpthread#include <stdio.h>#include <unistd.h>#include <pthread.h>#define MAXNITEMS 100000#define MAXNTHREADS 10int nitems = MAXNITEMS;int buff[MAXNITEMS];struct val { pthread_mutex_t mutex; int nput; int nval;} put = { PT...
技术 | 2010-07-30 19:48 | 阅读 2237 次 | 评论 0 条

函数打桩原型

//--- 借用宏定义实现#include <stdio.h>int Function_2(){ return 2; }int Function_1(){ return 1; }int main( int ac, char **av ){ printf("stub test:%d\n", Function_1());#define Function_1 Function_2 printf("stub test:%d\n", Function_1());#undef Function_1 printf("stub test:%d\n...
技术 | 2010-07-24 22:12 | 阅读 2066 次 | 评论 0 条
浏览1941028次