|
Google最近开源了其基于xUnit的C++单元测试框架
Google最近开源了其基于xUnit的C++单元测试框架。项目开发者Zhanyong Wan说在google优化内部已经有数以千计的C++开发者在使用该框架,并且已经持续好几年了。4 E8 x, }4 l$ k
" H; D7 i% W# U& t) O
根据Google所述,此次发布的主要亮点体现在:
& x8 C u: }4 Z' e7 c3 H. Q6 E/ z; N w5 G
Google Test是便携式的:它可以通过不同版本的GCC和MSVC编译器应用在多种平台上(Linux、Windows、Mac OS X等等)。你甚至可以将它用于Windows CE和Symbian这样的嵌入式系统中。很多平台的构建工具和测试运行器都处在开发当中,并且现在已经有Linux的Autotools支持了。
$ r5 S V5 |/ p0 l+ P4 ^
! q- A) d2 \# w( z 支持fatal和nonfatal断言。在nonfatal失败后测试还会继续。这使得在一次单独的编辑——编译——测试周期中能发现并修复更多问题。2 X$ O) i( ^9 [. p; q+ A1 P( Z Y, V
! v. o1 n `" `" n
对常见的测试需求提供很多断言,同时你也可以轻松地对不常见的情况定义新的断言。
# f3 I1 u% g8 k7 r# l+ [! e
2 @4 L# R$ U7 j s! ~: L 在Linux上,你可以编写death tests以确保你的代码在遇到期望的错误时崩溃。
7 D# P- J h# s0 ^0 z( X# R; ~9 @5 @# J3 N
因为该框架基于流行的xUnit架构,所以如果你以前使用过该家族中的任何一个测试框架,那么就很容易掌握它。1 W7 X! T' v- w
9 O8 H. Z/ `9 c8 K) j {
C++社区一直都觉得他们的单元测试工具不如Java和C#等其他现代语言的好,很多人还会问:“为什么还要用另一个工具?它有什么特别的?”。在其wiki的Faqs中,Googlers尝试去解答这些问题。他们说他们并没有宣称其工具要比现存的好,而仅仅是将对其工作有帮助的一些功能整合起来。从该站点上我们看到:7 p- F- c5 p/ U% @
7 d, M: @( k0 A* i+ k 我们希望这个列表能帮助你判定google排名Test是否对你也有帮助:7 a4 o# M3 j, F
' n1 J$ L' E; z Google Test被设计为便携式的。在很多STL类型(如std::string及std::vector)无法编译的地方它都能正常执行。它无需异常或者RTTI。所以,它能运行在Linux、Mac OS X、Windows及一些嵌入式操作系统上。5 d1 ?! b3 M" z" W% b5 ]! P
3 y; c: R8 \$ _+ v X" |
事实证明Nonfatal断言(EXPECT_*)可以节省大量时间,因为他们使得在一次单独的编辑——编译——测试周期中能报告多个失败。6 O1 w2 |) l! t5 d9 d
# z( n9 t4 _' c
编写可以生成信息的断言非常简单:就用流(stream)语法来附加任何额外的信息就行,如ASSERT_EQ(5, Foo(i)) <<"where i = "<< p>
p# Q( N2 N! G: `
/ c' a: C. {8 [7 U Google Test自动检测你的测试,你如果想运行测试的话就无需列举他们。
( J6 F/ L9 g# u: w7 C5 \/ @9 Y% G
% j% u9 v- p+ h: ?3 `% S 没有一个框架能预料到你所有的需求,因此Google Test提供了EXPECT_PRED*以方便地扩展你的断言词汇表。通过良好的语法,你可以使用EXPECT_PRED*来方便地定义你自己的断言宏。
6 \! J2 f% J9 \; P; T" N* b7 M4 ~2 p( m+ V2 d; @) j5 G
Death tests非常方便,它能确保恰当的情况可以触发你在产品中的断言。; v* w/ Z0 s7 X* O0 V
) W: h4 |% d! m n0 U4 V 当断言失败是来自于内部的过程或者循环时,SCOPED_TRACE有助于你了解断言失败的上下文。
4 w7 l* F2 d$ [0 {# P& Y* P* @( |/ i& w% v! f/ a; a, S! L
你可以使用命名模式来决定运行哪些测试。网站优化当你想快速重现某个失败时这会节省你大量时间。
( m% Q: M: a6 I. [5 x7 V$ ?3 r5 u( x; C( k6 {) F# D
Saptarshi Purkayastha花了一些时间来调研该框架并在其博客上写了一些想法。他的反应是积极的。+ B0 X; R# t1 N4 [3 s
( ^' c# Z3 U8 m* o
该框架另一个让人称道的地方就是学习其基础与高级特性都是那么容易。它与xUnit非常像并且具备了可以与CppUnit抗衡的优势。你可以从这里学习基础,从这里学习高级特性。Predicate Assertions可能是我最喜欢的特性之一了,当我们调试遇到麻烦时就可以在程序中使用该特性。还有很多其他的断言,我们还没有深入地研究他们。但是自从第一次看到该框架,我们很多人就将它作为最好的测试框架之一了 |
|