C++test 打桩

1       打桩

1.1.      编写源代码和测试代码

1.2.      编写桩函数

[Parasoft]-[显示视图]-[桩函数]

[选择原始的(函数)]-[右键创建用户桩函数…]

编写用户桩函数

2    源代码

#include <stdio.h>

int add(int a,int b)

{

return a+b;

}

int compare(int a,int b)

{

if (a>=b)

return add(a,b);

else

return add(a,b);

}

void main()

{

int a=10,b=5;

int c=compare(a,b);

printf("%d",c);

scanf("%c",&c);

}

3    测试代码

#include "cpptest.h"

CPPTEST_CONTEXT("cpptest/cpptest/源文件/cpptest.cpp");

CPPTEST_TEST_SUITE_INCLUDED_TO("cpptest/cpptest/源文件/cpptest.cpp");

class TestSuite2 : public CppTest_TestSuite

{

public:

CPPTEST_TEST_SUITE(TestSuite2);

CPPTEST_TEST(test_compare_1);

CPPTEST_TEST(test_compare_2);

CPPTEST_TEST_SUITE_END();

void test_compare_1();

void test_compare_2();

};

CPPTEST_TEST_SUITE_REGISTRATION(TestSuite2);

void TestSuite2::test_compare_1()

{

int a=10,b=6;

int c=compare(a,b);

CPPTEST_ASSERT_INTEGER_EQUAL(4,c);

}

void TestSuite2::test_compare_2()

{

int a=10,b=6;

int c=compare(a,b);

CPPTEST_ASSERT_INTEGER_EQUAL(1,c);

}

4    桩代码

#include "cpptest.h"

int add (int a, int b) ;

int CppTest_Stub_add (int a, int b)

{

// 根据不同的测试用例,例如test_compare_1,test_compare_2

// 分别执行不同的桩函数分支,实现一个桩函数返回不同值。

if (strcmp("test_compare_1", CppTest_GetCurrentTestCaseName())==0)

{

return 4;

}

else if (strcmp("test_compare_2", CppTest_GetCurrentTestCaseName())==0)

{

return 1;

}

}

时间: 2024-10-09 16:54:05

C++test 打桩的相关文章

C++单元测试--打桩测试

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

程序设计基石与实践系列之类型提升、内存分配,数组转指针、打桩和矢量变换

英文出处:Peter Fa?ka: Guide to Advanced Programming in C C语言可用于系统编程.嵌入式系统中,同时也是其他应用程序可能的实现工具之一. 当你对计算机编程怀有强烈兴趣的时候,却对C语言不感冒,这种可能性不大.想全方位地理解C语言是一件极具挑战性的事. Peter Fa?ka 在2014年1月份写下了这篇长文,内容包括:类型提升.内存分配,数组转指针.显式内联.打桩(interpositioning)和矢量变换. 整型溢出和类型提升 多数C程序员以为,

C++test对多变参数的函数打桩处理技巧

代码样例: 在如下的fun函数中存在printf语句,如果下面的代码片段想要达到100%的覆盖率,则需要考虑打桩printf函数,并且在桩中修改参数d所指向的值. int fun(int a, int b) {char d[10] = "hello";//char d[10];printf("+++++++++++++%d%s\n", a, d);if (d[0] == 't') ;else ; //puts(d);return 1; } 解决方法: 对于多变参数的

windows 下实现函数打桩:拦截API方式

windows 下实现函数打桩:拦截API方式 最近因为工作需要,开始研究函数打桩的方法.由于不想对工程做过多的修改,于是放弃了使用Google gmock的想法.但是也足足困扰另外我一天一宿.经过奋战,终于有所收获.闲话少说,开始看看有什么方法. 一.基础准备 1. 函数调用的原理:通过函数名(函数的入口地址)对函数进行访问,假设我们能够改变函数首地址指向的内存的话,使其跳转到另一个函数去执行的话,那么就可以实现函数打桩了. 2. 方法:对函数首地址出写入一条汇编语言 jmp xxx (其中x

Java单元测试进阶之如何打桩(用easymock轻松打桩)

打桩(mock)是单元测试的重要内容和难点,学好打桩的技术,做单元测试基本就没什么困难了. mock有两种,一种是静态的,一种是动态的.静态的就是在写测试代码之前根据需要打桩的类生成另外一个类,这个类就是mock object.动态的就是mock object是在测试代码运行的时候才生成的.所以很明显,动态打桩比静态打桩要方便地多.本章就是介绍动态打桩的工具. 早期的动态mock工具只能够mock接口,而不能够mock类:现在的mock工具无论是mock接口还是类都能够轻松完成了. easymo

库打桩机制

1.编译时打桩linux>gcc -DCOMPILETIME -c mymalloc.clinux>gcc -I. -o intc int.c mymalloc.olinux>./intc使用-I.参数,它会使C预处理器会在搜索通常的系统目录之前,现在当前目录中查找 mymalloc.c: #ifdef COMPILETIME #include <stdio.h> #include <malloc.h> void * mymalloc(size_t size){

C代码的打桩框架 - FFF (Fake Function Framework)

我只是IT圈的搬运工,项目原址https://github.com/meekrosoft/fff FFF是一个用宏实现的小框架,只需要一个头文件fff.h,没有任何其他依赖,非常简洁. FFF的核心就是三个宏: FAKE_VOID_FUNC(fn [,arg_types*]); 定义一个名为fn的桩函数,返回值为空,有n个参数. FAKE_VALUE_FUNC(return_type, fn [,arg_types*]); 定义一个名为fn的桩函数,返回值类型为return_type,有n个参数

mock打桩测试

pom依赖: <!-- https://mvnrepository.com/artifact/org.jmockit/jmockit --> <dependency> <groupId>org.jmockit</groupId> <artifactId>jmockit</artifactId> <version>1.48</version> <scope>test</scope> <

设计模式之Decorator(油漆工)(转)

Decorator常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这两种实体在Decorator模式中是必须的. Decorator定义: 动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活. 为什么使用Decorator? 我们通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势