如何在cppunit中动态的添加form?并在运行某个测试用例时,弹出窗口来显示视频图像等?
在cppunit中,是通过new一个个的unit来添加test suite与testcase的。那么如何在运行的过程中,如果要在form中,添加panal,来显示视频画面之类的呢?
首先new一个form。在窗体设计器模式,可以看到一个object inspector,有一个Events的tab,找到OnClose,输入函数名称,然后点一下就OK。
在.Cpp文件中,添加如下代码:
void _fastcall TForm1::FormClose(Tobject *Sender,TcloseAction &Action)
{
Action=caFree; //add by amy
}
在调用Close()时,会自动触发OnClose事件,我们知道窗体没有关闭,而是最小化,说明在OnClose中Action的此时的值为caMinimize。所以我们要写上面的方法来关闭。
参考上篇文章,自动化工具cppunit在bcb中的应用方法中的方法,创建了一个unit,并参考example,添加了testsuite。现在要做的就是在unit写的中,调用上面的form。 在.h文件中,添加#include "xxx.h",xxx为上面new的form的.h文件名称一致。并在自己创建的类中,声明如下(部分代码):
class xxx : public TestCase
{ public:
TForm1 *VideoShowForm;// TForm1的名称与上面的form中的名称一致。
void CreateShowVideo();//在此函数中动态创建TForm1
}
在cpp文件中,实现函数
void StartPreviewTestSuite::CreateShowVideo()
{
try
{
VideoShowForm=new TForm1(Application);
g_hWndPreviewAry=new HWND[3];
g_hWndPreviewAry[0]=VideoShowForm->mVideoPanal1->Handle;//可以调用TForm1中创建的panal。
VideoShowForm->Show();或是VideoShowForm ->ShowModal(); }
catch(Exception &)
{
Application->ShowException(&);
}
}
最后使用完了的释放问题:如果在tearDown中释放,会有什么问题呢?
delete VideoShowForm;//运行结束,如success时,form窗口显示一下,会立即消失。如果是显示视频图像,可能还没有来得及看,就窗口关闭了。
在需要的地方,如setup函数中,调用CreateShowVideo();
理论上无论窗体创建是否完成,都必须运行delete来释放刚才创建的子窗体,如delete VideoShowForm;但是我们已经在前面把释放的过程写在OnClose事件函数内,这个函数有一个参数为Action,它有四个取值:caNone为不关闭窗体,什么也不操作;caHide为不关闭窗体,但把它隐藏起来;caFree为关闭窗体,同时释放内存;caMinimize为最小化窗体,不关闭。所以关闭form后,会自动释放。
Project/option/form中,有两种形式:其中,autocreate就是Form在应用程序中自动创建,而available是创建了一个窗口类,在你动态创建的时候才会实例化窗口类。