1. 什么是exploding fake?
让我们先看以下代码。
int a_stub(){
fail("Boom!!! I shouldn't have been called!!!");
return 0;
}
或更常见的情形:
int a_stub(){
fail("Hey!!! I'm actually called! Now you can think about "\
"what behaviour do you want me to have. Do you want me to "\
"return a specific value?");
return 0;
}
那么,哪里会用得上 exploding fake 呢?比如,你要给遗留代码做单元测试,为了保证单元测试能够顺利编过,你不得不加上百个桩,这样的场景下,你很难有足够的时间先把所有的桩的都实现好,把每个桩的目的、返回值都搞得很清楚。这个时候,如果你先让这些桩先自爆。先通过编译,增加单元测试,然后检查这些自爆的桩是否需要被调用到,是否需要额外的行为,是否需要什么返回值。
2. 可以自动生成exploding fake吗?
我们都知道,在给遗留代码写单元测试的时候,需要用到很多的桩,如果用爆炸桩(exploding fake)也需要很多,是不是有什么办法自动化地生成这些exploding fake呢?
答案肯定是有的,因为这些exploding fake无非是依赖函数的签名,只要照着签名实现桩,并且在执行过程中会打印出相应的输出即可。比如尹哲写的lizard 工具就可以读出所有函数的签名,只要稍微写个脚本就可以自动生成自己需要的exploding fake了。有兴趣的同学可以自己试一下,当然能共享出来就更好了。
实际上,James Grenning已经实现了自动生成 exploding fake 的脚本: 源代码 >>
3. 在动态语言中,exploding fake有用吗?
其实exploding fake的初衷就是让依赖自爆,让程序员知道哪里有依赖,是否需要桩及需要什么样的桩。而动态语言不是基于编译和链接的,当没有依赖项的时间,程序的运行很自然是会失败的,换句话说,它本身已经是自爆类型了。:p
转载请注明出处,阅读原文 >>