最近看了<<重構:改善現有代碼...>>里面的JAVA人寫了一個測試用例,吹噓用到了JAVA反射等"高級功能",我也寫一些測試代碼看看.
首先是代表性能數據的類:
class CapabilityCount
{
public:
static void Out();
char* m_clue;
CapabilityCount *m_pre;
DWORD m_frequency;
DWORD m_times;
static CapabilityCount*head;
CapabilityCount(char* clue);
};
CapabilityCount*CapabilityCount::head=0;
CapabilityCount::CapabilityCount(char*clue)
{
m_pre=head;
head=this;
m_clue=clue;//連成一片,接受一個字符串作輸出標識.
}
void CapabilityCount::Out()//輸出到文本文件
{
std::fstream out;
CTime time;
out.open ("d:\\testcount.txt",std::ios_base::ate|std::ios_base::out);
ASSERT(out.is_open ());
time=CTime::GetCurrentTime();
out<<"is begin write in"<<time.GetDay() <<" : "
<<time.GetHour ()<<" : "
<<time.GetMinute ()<<"\n";
CapabilityCount *psearch=head;
while(psearch)
{
out<<"type:"<<psearch->m_clue<<"all time(milliseconds):"<<psearch->m_times
<<" be call frequency :"<<psearch->m_frequency
<<" average time(milliseconds):"
<<psearch->m_times /psearch->m_frequency<<"\n\n";
psearch=psearch->m_pre ;
}
}
然后是一個"改動者",負責更新CapabilityCount類
class CapabilityCountHelper
{
DWORD m_begintime;
CapabilityCount &m_supervised;
public:
CapabilityCountHelper(CapabilityCount& in);
~CapabilityCountHelper();
};
CapabilityCountHelper::CapabilityCountHelper(CapabilityCount& in):
m_supervised(in)
{
m_begintime=GetTickCount();
++m_supervised.m_frequency;//被調用的次數
}
CapabilityCountHelper::~CapabilityCountHelper()
{
DWORD spend=GetTickCount()-m_begintime;
m_supervised.m_times +=spend;//花掉的總時間
}
知道怎么用吧?
在要測試的函數前加上
static CapabilityCount //一定要有static哦
CapabilityCountInstance("function name or else");
CapabilityCountHelper CapabilityCountHelperInstance(CapabilityCountInstance);
嫌麻煩?
#define KILL_BILL__KILL_BILL__KILL_BILL(clue) static CapabilityCount \
CapabilityCountInstance(clue); \
CapabilityCountHelper CapabilityCountHelperInstance(CapabilityCountInstance) \
最近想看<<殺死比爾>>,雖然殺的不是我想的:(
你可以用更精確的時間函數來測試.不過這不關我事;
你也可以在內聯函數中或甚至上面的CapabilityCount::Out函數中加入
KILL_BILL__KILL_BILL__KILL_BILL("CapabilityCount::Out");
發生什么事可不關我事:(
文章來源于領測軟件測試網 http://www.kjueaiud.com/