一切福田,不離方寸,從心而覓,感無不通。

单元测试里的 5 个错误

当我第一次听说可以使用框架比如JUnit来进行单元测试的时候,我惊叹这真是一个简单而强大的概念。它取代了随机测试,使你可以保存你的测试代码,并按照需要随时运行它们。按照我的理解,关于单元测试并没有多少产生误解的可能。但是过去的几年中,我确实见过几种或多或少不太正确的单元测试使用方式。这里按照重要程度,列出5条:   1. 跟协作逻辑一起来测试算法。如果跟协作逻辑代码分离开来,那么算法逻辑是最容易测试的(参见选择性单元测试 – 代价和好处)。否则在你的逻辑被测试之前,你就不得不先进行诸如通过任务队列提交一个任务之类的工作。 任务队列部分只会使事情变得复杂。除非你想测试任务队列本身,否则你就应当把调用run方法时所执行的逻辑剥离开来,并对它进行单独测试。那样,不论是编码还是测试都会更易于编写和管理。 2. Mock测试太多。也许单元测试的最大好处就是它迫使你编写能够独立测试的代码。也就是说,你的代码会变得模块化。当你把你要处理的对象的周围的一切都模拟了,就没有什么能迫使你去把各部分分离开来。你会发现这样写出的代码,你很难在外围添加独立的部分 – 因为所有东西都纠缠在一起。Bill Wake最近发推说: ”真是讽刺 – 模拟测试框架越强大,你在改进设计时所感受到的压力就会越小。” 3. 不使用断言。有时我会看到一些测试,里面创建了一个对象,调用了一些方法,然后,就没有然后了。也许它是在循环里这样做的,而且在创建和调用上会有些差异。但是,却没有用断言来做任何检查。这就完全失去了意义 – 没有检查你的代码是否按照预期进行工作的。当然,代码是运行了,但是仅此而已。如果抛出了一个异常,我们会注意到它,但是却不会验证其它任何事情。 4. 在测试代码中遗留print语句。我把这视为手工测试的后遗症 – 你希望看到对象的值来判断它们是否正确。但是所有的检查都应当使用断言来完成。如果单元失败了,你也能看到它,因为这个测试也会失败。当测试通过时,什么也不应当打印出来。在编写测试代码时,使用print语句有时是有用的。但是在需要用print的地方应当设置一个标志位,用来在进行测试的时候屏蔽它。 5. 查看日志信息,而不是运行结果。 还好这并不普遍,但是我却见过一个非常有能力的开发人员这么干过。要知道,真正重要的是方法的运行结果,而不是日志中都打印了什么,因为即使代码中有错误,测试也可能会通过。好了,说的很明白了。 后面3个问题都很容易规避。头2个问题则需要付出更多努力,但是会得到良好分离的代码。祝测试愉快!   from:http://www.oschina.net/translate/5-unit-testing-mistakes

龙生   25 Feb 2014
View Details

MagicZoom bug-Strict Standards: Only variables should be assigned by

龙生   25 Feb 2014
View Details

PHP配置文件详解php.ini

[PHP] ; PHP还是一个不断发展的工具,其功能还在不断地删减 ; 而php.ini的设置更改可以反映出相当的变化, ; 在使用新的PHP版本前,研究一下php.ini会有好处的 ;;;;;;;;;;;;;;;;;;; ; 关于这个文件 ; ;;;;;;;;;;;;;;;;;;; ; 这个文件控制了PHP许多方面的观点。为了让PHP读取这个文件,它必须被命名为 ; 'php.ini’。PHP 将在这些地方依次查找该文件:当前工作目录;环境变量PHPRC ; 指明的路径;编译时指定的路径。 ; 在windows下,编译时的路径是Windows安装目录。 ; 在命令行模式下,php.ini的查找路径可以用 -c 参数替代。 ; 该文件的语法非常简单。空白字符和用分号';’开始的行被简单地忽略(就象你可能 ; 猜到的一样)。 章节标题(例如 : [Foo])也被简单地忽略,即使将来它们可能 ; 有某种的意义。 ; ; 指示被指定使用如下语法: ; 指示标识符 = 值 ; directive = value ; 指示标识符 是 *大小写敏感的* – foo=bar 不同于 FOO = bar。 ; ; 值可以是一个字符串,一个数字,一个 PHP 常量 (如: E_ALL or M_PI), INI 常量中的 ; 一个 (On, Off, True, False, Yes, No and None) ,或是一个表达式 ; (如: E_ALL & ~E_NOTICE), 或是用引号括起来的字符串(" foo" ). ; ; INI […]

龙生   25 Feb 2014
View Details

PHP输出中文乱码的问题

用echo输出的中文显示成乱码, 其实应该是各种服务器脚本都会遇到这个问题, 根本还是编码问题, 一般来说出于编码兼容考虑大多的页面都将页面字符集定义为utf-8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 这时候要正常显示中文需要转化一下编码方式,比如 echo iconv("GB2312","UTF-8",’中文');就不会乱码了 还有其他方法,比如 在php的echo前面加入header("Content-Type:text/html;charset=gb2312"); 当然简体中文页面也可以干脆地, 把<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />中的UTF-8改成gb2312 实际中遇见奇怪的现象, 在本机服务器上正常显示的页面,传上服务器就echo出来乱码, 没仔细琢磨过这个缘由,因为通过iconv函数GB2312、UTF-8换换位置重新编码下就正常了, 不过估计肯定是APACHE,更确切说是PHP服务端的设置不同造成的, 看看PHP.INI应该就能解决。 from:http://www.cnblogs.com/leandro/archive/2008/04/21/1368517.html

龙生   25 Feb 2014
View Details

import_request_variables

龙生   25 Feb 2014
View Details