• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

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

发布: 2009-12-17 11:37 | 作者: 不详 | 来源: 领测国际软件测试网采编 | 查看: 209次 | 进入软件测试论坛讨论

领测软件测试网

   用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++的,比较灵活。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网