gtest的一个简单扩展

看了gtest的一个simple,其中有测试运行时间的方法,但使用起来稍微负责,因此做了一个简单的扩展。

扩展内容:
1. TEST_T(test_case_name, test_name),用于定义运行时间测试用例。
2. TEST_T_SHOWTIME(),打开打印测试用例运行时间打印开关。
3. EXCEPT_TIME(second)和ASSERT_TIME(second),断言,second为double类型,测试运行时间是否小于second。

使用说明:
向正常使用一样,只是在需要时间测试时include “gtest_e.h”即可,当然也得把相应的库链接到执行文件中。

具体实现:
源文件gtest_e.h----

/**/ /**
 * gtest_e.h
 
*/


#ifndef GTEST_E_H_
#define  GTEST_E_H_

#include 
" gtest_time.h "

#define  TEST_T(test_case_name, test_name)\
    GTEST_TEST(TIME_##test_case_name, test_name, ::TimeTest)

#define  TEST_T_SHOWTIME() TimeTest_setShowFlag(1)

#define  ASSERT_TIME(time) if(TimeTest_setTimePoint() - time > 0) \
    FAIL() 
<<   " Time: running  "   <<  TimeTest_getTime()  <<   " (s) >  "   <<  time  <<   " (s) "

#define  EXCEPT_TIME(time) if(TimeTest_setTimePoint() - time > 0) \
    ADD_FAILURE() 
<<   " Time: running  "   <<  TimeTest_getTime()  <<   " (s) >  "   <<  time  <<   " (s) "

#endif  /* GTEST_E_H_ */
源文件gtest_time.h----
/**/ /**
 * gtest_time.h
 
*/


#ifndef GTEST_TIME_H_
#define  GTEST_TIME_H_

#include 
< gtest / gtest.h >

class  TimeTest:  public  testing::Test
{
public:
    inline 
void TimeTest_setShowFlag(int flag)
    
{
        show_time_ 
= flag;
    }


    inline 
double TimeTest_getTime()
    
{
        
return end_time_ - start_time_;
    }


    
double TimeTest_setTimePoint();

protected:
    
double start_time_;
    
double end_time_;
    
int show_time_;

    
virtual void SetUp();
    
virtual void TearDown();
}
;

#endif  /* GTEST_TIME_H_ */
源文件gtest_time.cpp----
/**/ /**
 * gtest_time.cpp
 
*/


#include 
< iostream >
#include 
" gtest_time.h "

using   namespace  std;

#if  defined(WIN32)
#include 
< sys / timeb.h >
double  now()
{
    
struct _timeb current;
    _ftime(
&current);
    
return (((double) current.time) + (1.0 * current.millitm) * 0.000001);
}

#else
double  now()
{
    
struct timeval current;
    gettimeofday(
&current, NULL);
    
return (((double) current.tv_sec) + 1.0e-6 * ((double) current.tv_usec));
}

#endif

void  TimeTest::SetUp()
{
    start_time_ 
= now();
    end_time_ 
= 0;
    TimeTest_setShowFlag(
0);
}


void  TimeTest::TearDown()
{
    
if (show_time_)
    
{
        
double used_time = TimeTest_setTimePoint();
        cout 
<< "[   TIME   ] used time: " << used_time << "(s)"
                
<< endl;
    }

}


double  TimeTest::TimeTest_setTimePoint()
{
    end_time_ 
= now();
    
return TimeTest_getTime();
}


以上内容只是一个简单的实现,没有过多的测试,且时间精度不够,误差较大。

你可能感兴趣的:(gtest的一个简单扩展)