看了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
*/
#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
*/
#include <iostream>
#include "gtest_time.h"
using namespace std;
#if defined(WIN32)
#include <sys/timeb.h>
double now()
{
struct _timeb current;
_ftime(¤t);
return (((double) current.time) + (1.0 * current.millitm) * 0.000001);
}
#else
double now()
{
struct timeval current;
gettimeofday(¤t, 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();
}
以上內容只是一個簡單的實現,沒有過多的測試,且時間精度不夠,誤差較大。



![Subscribe to [00] 隨筆(3)](/Skins/KJC/Images/xmlsmall.gif)
