找回密码
 FreeOZ用户注册
查看: 2856|回复: 15
打印 上一主题 下一主题

[论坛技术] Google 的 C++ 测试框架和 Mocking 框架

[复制链接]
跳转到指定楼层
1#
发表于 15-12-2008 15:08:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
Google C++ Testing Framework
Google's framework for writing C++ tests on a variety of platforms (Linux, Mac OS X, Windows, Cygwin, Windows CE, and Symbian). Based on the xUnit architecture. Supports automatic test discovery, a rich set of assertions, user-defined assertions, death tests, fatal and non-fatal failures, value- and type-parameterized tests, various options for running the tests, and XML test report generation.

Google C++ Mocking Framework
Inspired by jMock, EasyMock, and Hamcrest, and designed with C++'s specifics in mind, Google C++ Mocking Framework (or Google Mock for short) is a library for writing and using C++ mock classes. Google Mock:
    * lets you create mock classes trivially using simple macros,
    * supports a rich set of matchers and actions,
    * handles unordered, partially ordered, or completely ordered expectations,
    * is extensible by users, and
    * works on Linux, Windows, and Mac OS X.
We have enjoyed using Google Mock in many projects at Google, and hope you find it useful too!
回复  

使用道具 举报

2#
发表于 15-12-2008 16:55:02 | 只看该作者
这个Mock框架不错,C++做Mock一直都是很繁琐的
回复  

使用道具 举报

3#
 楼主| 发表于 15-12-2008 18:32:46 | 只看该作者

回复 #2 coredump 的帖子

现在 Google C++ Mocking Framework 只支持 Google C++ Testing Framework
回复  

使用道具 举报

4#
发表于 15-12-2008 18:58:16 | 只看该作者
提示: 作者被禁止或删除, 无法发言
啥意思?可以直接在WEB的IDE上写代码,在WEB上调试运行么?
回复  

使用道具 举报

5#
发表于 16-12-2008 16:02:11 | 只看该作者

回复 #4 xblues 的帖子

C++版本的Junit和JMock.
你用.NET的话对应NUnit和NMock.

C++由于是强类型的静态语言,不像Java和.NET那样可以方便的使用一些动态语言特性进行单元测试,所以一直没有很好的UnitTest和Mock框架。现有的一些实现都比较繁琐。
回复  

使用道具 举报

6#
发表于 16-12-2008 16:20:39 | 只看该作者

回复 #5 coredump 的帖子

提示: 作者被禁止或删除, 无法发言
我还没有用过你说的那些测试框架呢。给我讲讲为什么C++不方便测试呢?静态语言有啥不好呢?
回复  

使用道具 举报

7#
发表于 16-12-2008 17:10:55 | 只看该作者

回复 #6 xblues 的帖子

C++没有metadata, 无法提供运行时自省和反射的能力,比如运行时知道自己是哪个类,自己有多少方法,从哪继承的,动态invoke一个方法,动态构造一个新对象等等。一些著名的Java和.NET框架都大量依赖这些特性,而C++为了追求效率的考虑没有元数据标准,RTTI也仅仅提供最基本的支持,所以无法或很难实现诸如Java框架里的Spring, Hibernate, AOP, IoC等炫目的功能。
回复  

使用道具 举报

8#
发表于 16-12-2008 18:49:25 | 只看该作者

回复 #7 coredump 的帖子

提示: 作者被禁止或删除, 无法发言
  请讲中文!!!

我不会C++,真不知道什么是C++不好做的或者做不到的,具体一点啊。
回复  

使用道具 举报

9#
发表于 16-12-2008 20:41:49 | 只看该作者

回复 #8 xblues 的帖子

哪句不懂? 这些应该都是语言中性的概念吧
回复  

使用道具 举报

10#
发表于 17-12-2008 09:15:12 | 只看该作者
C++ 和JAVA.NET什麼的不是在同一個應用層上的, 一個編譯後機器語語言一個是偽代碼, 各自適應不同的開發環境, 就象3米跳水和10米跳水怎麼比..  JAVA .NET上那些特性也是人寫出來的, 有空的話可以自己設計一套SELF REFLECTION的標準玩, 類似於COM/DCOM.. 偶以前公司的資深工程師就搞過.. 在VXWORKS上實現一些簡單的類似於COM的特性, 後來因為COMPILE出來的BINARY 太大, 最終還是沒怎麼用.. 要知道那時TARGET上的只有32M內存.. 除掉OS, STACK,HEAP等等,CODE最多分給你不到10M。。
回复  

使用道具 举报

11#
 楼主| 发表于 17-12-2008 09:49:51 | 只看该作者
有了测试框架,就可以用 TDD 方式开发软件了

有了 Mocking 框架,就可以用 EDD 方式开发测试了

Error Driven Development

哈哈
回复  

使用道具 举报

12#
发表于 17-12-2008 10:24:06 | 只看该作者
Error Driven Development

这个中文怎么翻译?错误驱动开发?

不是人定胜天的么,有错误就要克服之,怎么可以被错误赶着跑。
回复  

使用道具 举报

13#
 楼主| 发表于 17-12-2008 10:38:27 | 只看该作者

回复 #12 someonehappy 的帖子

用 Mock 写测试程序,很难知道被 Mock 的类全部的会被调用到的方法,被调用的次数,以及被调用时需要返回的期望值。

所以基本上都是写一点儿,执行一下,看有什么错误。

错误一般都是xxx.xxx(xxx) is not expected to be called 或者 xxx.xxx(xxx) is expected to be call once but actually twice.

根据错误修改测试,直到没有错误。

我称这种开发方式为 EDD
回复  

使用道具 举报

14#
发表于 17-12-2008 11:05:27 | 只看该作者
原帖由 ingeer 于 17-12-2008 09:15 发表
C++ 和JAVA.NET什麼的不是在同一個應用層上的, 一個編譯後機器語語言一個是偽代碼, 各自適應不同的開發環境, 就象3米跳水和10米跳水怎麼比..  JAVA .NET上那些特性也是人寫出來的, 有空的話可以自己設計一套SELF REF ...


C++的REFLECTION实现我使用过最好的是Reflex, 其它的都有或多或少的侵入性, 用Reflex实现过一个ORM library, 不如Hibernate那样全面,可是性能非常不错,而且基于Reflex的实现可以在运行时选择是否加载以及加载哪些元数据。
回复  

使用道具 举报

15#
发表于 17-12-2008 20:14:02 | 只看该作者
c++ 的native不支持REFLECTION,但是c++.net也可以reflect的,nunit那些得益于.net framework自己包含的元数据,可以在运行时通过attribute中取出类型信息。而cppunit就没那么幸运了,高人为了简化,把之变成一个个宏来注册。
回复  

使用道具 举报

16#
发表于 17-12-2008 20:23:44 | 只看该作者
我觉得c++没有reflection是因为c++是很久以前的语言了,BS说c++的改进重点在库上,所以我想c++也不会加入这些特性了,当然库可以支持这个特性,例如mfc,如果所有类来自CObject,可以在运行时取得类型信息。
这是第一次听Error Driven Development,要好好学习一下。
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 5-9-2025 03:01 , Processed in 0.049846 second(s), 32 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表