2012-02-11 79 views
0

我有一块C++代码,其单元测试即将完成。例如在C++中创建存根功能

//totest.h 
#include "lowerlayer.h" 
class ToTest 
{ 
    LowerLayer *ll; 
public: 
    ToTest(); 
    void function_totest(); 
}; 

//totest.cpp 
#include "totest.h" 
ToTest::ToTest() 
{ 
    ll = new LowerLayer(); 
} 
void ToTest::function_totest() 
{ 
    ll->function_lowerlayer(); 
} 

//lowerlayer.h 
class LowerLayer 
{ 
public: 
    LowerLayer(); 
    void function_lowerlayer(); 
}; 

//lowerlayer.cpp 
#include "lowerlayer.h" 
LowerLayer::LowerLayer() 
{ 
    //do nothing 
} 
void LowerLayer::function_lowerlayer() 
{ 
    //do nothing 
} 

这四个文件即: totest.h,totest.cpp,lowerlayer.h和lowerlayer.cpp是产品代码文件不应该被修改为单元测试。

我有一个测试程序,其代码如下

//testcode.cpp 
#include "totest.h" 
int main() 
{ 
    ToTest *tt = new ToTest(); 
    tt->function_totest(); 
    //some asserts 
    return 0; 
} 

现在,我必须创建类的低层和其功能的存根功能。 当从函数function_totest调用函数function_lowerlayer时,应使用来自testcode应用程序的控制标志来调用存根函数和实函数(一次一个)。

请提供一些建议来设计此要求。 谢谢, Ankur

+0

存根“功能”是什么?存根是一个尚未完成的方法的占位符,它通常包含有关如何实现该方法的注释,并且包含一个虚拟返回值,以便源文件将被编译。 – 2012-02-11 07:18:31

+0

@HunterMcMillen - 这不太正确;存根在测试环境中具有特定的含义。 [这是一篇不错的文章](http://martinfowler.com/articles/mocksArentStubs.html)从测试的角度解释'stubs'和'mocks'。 – dbn 2012-12-20 23:02:25

+0

这可能是[寻找代码存根生成器(从头文件)](http://stackoverflow.com/q/2020568/1309332)的副本。 – dbn 2012-12-20 23:04:29

回答

1

尝试在您的测试中使用GoogleMock。 http://code.google.com/p/googlemock/

通过JMock的,EasyMock的,和Hamcrest启发,并设计时考虑了C++的 细节,谷歌C++模拟框架(或谷歌模拟为 简称)是用于编写和使用C++模拟一个类库。谷歌 模拟:

,您可以创建平凡使用简单的宏mock类,支持 丰富的匹配和行动,处理无序,部分 有序的,或完全有序的期望,是用户可扩展的, 和在Linux上工作,Mac OS X,Windows,Windows Mobile,minGW和 Symbian。

+0

我尝试过使用Mockpp框架,并投入了一些时间。但它没有帮助我。我不确定GoogleMock。除了使用框架,还有其他的解决方案吗? – user982740 2012-02-12 00:21:04

+0

好吧,你可以编写自己的模拟器,但使用框架要容易得多。 – 2012-02-12 16:42:27

+0

出于某种原因,我认为Google Mock只能用于虚拟课堂或模板课程。这不正确吗? – dbn 2012-12-20 02:48:34