您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > Nunit
用NUnit跑C#和C++的单元测试
作者:网络转载 发布时间:[ 2013/4/2 14:12:20 ] 推荐标签:

  用NUnit跑C#和C++的单元测试  单元测试代码

  这几天打算用个自动化的单元测试框架来组织一些case,因为之前用过CppUnit,第一感觉是用它吧。刚好有个项目组做一个关于用NUnit的sharing,而且是兼容并包managed和native的case。想想可能能受到些启发,便跑去听了一下。

  他们用的测试框架当然是NUnit,跑C#的case自然不在话下,可是如何跑C++的case呢?不是CppUnit的改装,而是另外一套东西,有同学已经做出一个现成的工具了:GenTestAsm.,基本步骤如下:

  1. 用C++写case,并export。

  2. 解析C++ DLL文件,得到export的case

  3. 自动写C#代码调用这些export的case(看着高深,可有规律的东西肯定能自动化)

  4. 编译产生的assemly可以直接在NUnit里面跑了。

  很酷!

  顺便记下几点:

  1. NUnit和被测代码是在同一个进程里面,很容易由于被测代码引起整个测试框架的crash,那么拿到终的report会有问题。虽说C#的case不容易crash(没有指针?),但通过上述方法调用C++,让它crash不是件难事。所有好是能做进程外测试。

  2. NUnit使用shared copy的方法,使真正load进来的dll并不是你编译出来的那个,而是另外拷了一个,这样在可以在不关闭NUnit的情况下rebuild被测工程。当然,GetTestAsm也提供了Thunk DLL的技术,在每个case开始时load DLL, 结束时unload DLL,也达到了这种效果。

  3. VC++中Additional Dependencies除了lib,还能加obj,这样另外一个工程中的代码可以直接编译进本工程了。这么做的目的是希望使用另外一个DLL中的未export的函数。但是因为obj不是同一个工程编译出来的,一些工程设置上的不同可能会引起问题。

  4. LoadLibrary是可以load一个exe的,MSDN也说明了 --- 我竟然以前都没注意到。当然,写一个exe纯粹为了当dll那有点不和谐了。我遇到过的在exe里export函数,是为了在同一进程中的插件里使用这些函数。

  不错,可以考虑一下用NUnit,这样case既可以是C#的,也可以是C++的,比较灵活。

软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd