JUnit 4 如何正确测试异常

本篇讲述如何在 JUnit 4 下正确测试异常,我会从 try..catch 的方式谈起,然后说到 @Test(expected=Exception.class), 最后论及 @Rules public ExpectedException 的实现方式,最终基本可确定用 @Rules 是最方便的。

我们在用 JUnit 测试方法异常的时候,最容易想到的办法就是用 try...catch 去捕获异常,需要断言以下几个条件:

1. 确实抛出的异常
2. 抛出异常的 Class 类型
3. 抛出异常的具体类型,一般检查异常的 message 属性中包含的字符串的断定

所以常用的代码你可能会这么写:

这里被测试的方法是 Password.validate() 方法是否抛出了相应的异常,注意这里别漏 try 中的

fail("No Exception thrown.") 阅读全文 >>

jQuery 使用 $.getJSON() 跨域获取 JSON 数据

假设在服务器上有文件 http://test.unmi.cc/json.php 文件,它的内容为:

[代码 1]

要是在同一个域上要取该文件的内容,那好办,比如同为 test.unmi.cc 域上的 ajax.html 文件中写上:

[代码 2] 阅读全文 >>

Mac 下包抓取(sniffer) 工具介绍

由于近期常工作于 Mac 环境下,对有些应用稍加深入点研究就免不了要用到网络包抓取工具来分析。早先在 Windows 环境用过老牌的 Sniffer Pro 和 Netxray,以及后来都用免费开源的 Packetyzer 和  Wireshark。偶尔还用过 Windows 服务版自带的网络监视器。

那 Mac 下有什么好用的抓包工具呢,试用了一下下面几个工具:

一. tcpdump 命令

因为它是 Unix 族的,所以首先想到的是 tcpdump 工具,确实 Mac 下也有这个命令,但用起来也太难了,全在命令行下,看起来不直观。

tcpdump 命令的使用可参考以下两个链接:

1. Mac OS X: How to capture a packet trace
2. A tcpdump Tutorial and Primer

二. Ethereal

图形界面的,跨多平台,功能也不错,不过基本你可以忽略它了,它自 2006 年以来就没再发展了,永远死守在 0.99 版了。它就是大我鼎鼎的 Wireshark  的前生。

三. Wireshark

轮到 Wireshark 的隆重出场了,作为 Ethereal 更名后的产品,它仍然是开源的且多平台通吃的。你只要在 Windows 上用过它的话,在 Mac 下的操作方式都一样的。 阅读全文 >>

WordPress Code Editor 插件让你在线编辑主题/插件即时语法高亮

晚上找了一些时候在线的即时语加亮组件,很多的,在线的代码编辑器就语法即时高亮上都可与客户端的编辑器相媲美了。有商业的,功能很丰富的,也有开源的,像 CodePress,   就很简单它支持 PHP, JavaScript, Java, Perl, SQL, HTML 和 CSS 代码的即时着色,完全由 JavaScript 来进行渲染。

顺着 CodePress 来搜索,恰好还找到一个能让我们在 WordPress 的后台在线编辑插件/主题的代码编辑框中实现语法着色,并且时编辑时实时语法着色哦,那就是插件:WordPress Plugin Code Editor,可以点击 Code Editor  链接下载并安装为 WordPress 的插件。

安装完启用后,使能看到编辑插件/主题时的代码都高亮了,使代码的可读性大大增加,编辑时即时的效果,能让你修改代码时出错的几率明显降低。 阅读全文 >>

在 Java 中使用正则表达式进行后向引用($1,$2...)

自 JDK1.4 引入正则表达式的支持可称得上是次大改变,可 Java 的正则表达式的能力还是很弱,别说和 Perl 比了,就是和 C# 和 JavaScript 的正则表达式比较来也逊色不少,不过现在 JVM 上有其他语言对正则表达式有所增强,像 Groovy, jRuby 和 Scala。

[修正一下] 第一句话的说法是有误的,其实 JDK 本身的正则表达式就支持替换时用 $1, $2 那样的后向分组引用,例如:
String s = "abc def".replaceAll("(\\w+)\\s+(\\w+)", "$2 $1");  //s 就是  "def abc",replaceFirst 也可以用 $1, $2 的替换。

比如在 Java 中要实现正则表达式的分组,后向引用的方式进行替换挺复杂的,像 JavaScript 完成两个分组的调换:

在 Java 中可得用上 Pattern, Matcher,还要 find()/group() 等操作,于是我就会考虑在 Java 中完成类似的功能有没有曲线的方法,有的。你可以调用 JVM 上其他语言的功能,我这里用列了两种实现方式

JDK1.6 起可借助 ScriptEngineManager 使用 JavaScript 相应的函数,除此之外还可用第三方的库 JRegex,具体实现,请参见如下代码,还带了测试用例:

起初我是用的第一种方法,后来找到了第二种方式,感觉用 JRegex 更优雅些。

华军软件园的新广告模式,利用验证码转入广告

广告成了许多网站的主要盈利模式,而把广告发挥的淋漓尽致的尤以软件下载的网站。什么浮动的,弹窗的,色诱的都不算什么,最可恶的应该是伪装成下载链接的大按钮,一不小心就被安装了插件,引进了木马,不太懂电脑的人常常中招,致使半个屏幕的 IE 都是插件;而可能实际的软件根本下载不了。

刚刚下载个软件,搜索导向到了华军软件园,于是发现了它的一种新的置入广告的方式,那就是

验证码广告

看下图就知道了

阅读全文 >>

SPRING-MVC 访问静态文件, 如 jpg/js/css

如何你的DispatcherServlet拦截 .do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对.js,*.jpg的访问也就被拦截了。

 目的:可以正常访问静态文件,不要找不到静态文件报404。
 
方案一:激活Tomcat的defaultServlet来处理静态文件

要配置多个,每种文件配置一个  阅读全文 >>

强制退出Mac程序的六种方法

用电脑时间长了,难免会遇到程序卡住,风火轮狂转不停,没有任何相应等情况。可能是由于程序冲突、缓存不足或者一些bug等情况导致,这个时候我们就需要强制退出这个程序了,下面有六种在Mac系统中强制退出程序的方法,大家至少应该记住一两个。

1、使用键盘快捷键强制退出处于活跃状态的Mac程序快捷键:Command+Option+Shift+Esc这样按住一两秒钟,就可以强制退出当前程序了,算是最方便的一种方法。

2、打开强制退出程序窗口

使用快捷键:Command+Option+Esc

来打开“强制退出应用程序”的窗口,然后选中你需要退出的程序,再点右下方的“强制退出”即可。 阅读全文 >>

谈Objective-C中的property

property大概是objc中唯一的元编程机制,用来快速地生成类的数据成员的get和set方法。本文谈谈我对property的一些使用心得。

1)retain,copy和assign:

retain的作用在于生成set方法时该数据成员(一定是objc对象)的引用计数+1,通常用于除NSString类型以外的objc对象。如

一个常见的例外是delegate的set方法通常设为assign,这是为了避免循环引用造成的引用计数无法归0,然后内存泄漏——考虑一个view的delegate为该view所在controller的情况。

NSString类的对象的set方法设为copy,字符串对象需要深拷贝。 阅读全文 >>