﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Programmer-随笔分类-Ruby</title><link>http://www.blogjava.net/huaoguo/category/43062.html</link><description>my way</description><language>zh-cn</language><lastBuildDate>Fri, 11 Dec 2009 18:14:32 GMT</lastBuildDate><pubDate>Fri, 11 Dec 2009 18:14:32 GMT</pubDate><ttl>60</ttl><item><title>让Rspec支持中文</title><link>http://www.blogjava.net/huaoguo/archive/2009/12/12/305670.html</link><dc:creator>huaoguo</dc:creator><author>huaoguo</author><pubDate>Fri, 11 Dec 2009 17:47:00 GMT</pubDate><guid>http://www.blogjava.net/huaoguo/archive/2009/12/12/305670.html</guid><wfw:comment>http://www.blogjava.net/huaoguo/comments/305670.html</wfw:comment><comments>http://www.blogjava.net/huaoguo/archive/2009/12/12/305670.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huaoguo/comments/commentRss/305670.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huaoguo/services/trackbacks/305670.html</trackback:ping><description><![CDATA[首先是让描述支持中文，比如这样：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;author:&nbsp;Percival&nbsp;&nbsp;date:&nbsp;12/06/09<br />
#&nbsp;Have&nbsp;a&nbsp;good&nbsp;day!</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">require</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0); font-weight: bold;">'</span><span style="color: rgb(0, 0, 0); font-weight: bold;">clazz</span><span style="color: rgb(0, 0, 0); font-weight: bold;">'</span><span style="color: rgb(0, 0, 0);"><br />
<br />
describe&nbsp;Clazz&nbsp;</span><span style="color: rgb(0, 0, 255);">do</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;before(</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 255);">each</span><span style="color: rgb(0, 0, 0);">)&nbsp;</span><span style="color: rgb(0, 0, 255);">do</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(128, 0, 128);">@clazz</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;Clazz</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">new<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;it&nbsp;</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0); font-weight: bold;">必须能够存储和设置类名</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">do</span><span style="color: rgb(0, 0, 0);"><br />
<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;it&nbsp;</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0); font-weight: bold;">必须将它实现的接口存储在一个集合里</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">do</span><span style="color: rgb(0, 0, 0);"><br />
<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;it&nbsp;</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0); font-weight: bold;">必须有一个集合用来存储需要导入的类</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">do</span><span style="color: rgb(0, 0, 0);"><br />
<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;it&nbsp;</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0); font-weight: bold;">必须对外提供拥有的所有方法接口</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">do</span><span style="color: rgb(0, 0, 0);"><br />
<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;it&nbsp;</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0); font-weight: bold;">必须能够从一个文件中导入类信息</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">do</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;end<br />
<br />
end<br />
<br />
</span></div>
需要修改/lib/spec/example/example_proxy.rb为：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">require</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0); font-weight: bold;">'</span><span style="color: rgb(0, 0, 0); font-weight: bold;">iconv</span><span style="color: rgb(0, 0, 0); font-weight: bold;">'</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">让describe支持中文&nbsp;——Percival</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);"><br />
module&nbsp;Spec<br />
&nbsp;&nbsp;module&nbsp;Example<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;Lightweight&nbsp;proxy&nbsp;for&nbsp;an&nbsp;example.&nbsp;This&nbsp;is&nbsp;the&nbsp;object&nbsp;that&nbsp;is&nbsp;passed&nbsp;to<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;example-related&nbsp;methods&nbsp;in&nbsp;Spec::Runner::Formatter::BaseFormatter</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;ExampleProxy<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;initialize(description</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">nil</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;options</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">{}</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;location</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">nil)&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;:nodoc:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#让describe支持中文&nbsp;——Percival</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;description&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;Iconv</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">iconv(</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0); font-weight: bold;">GBK</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0); font-weight: bold;">UTF-8</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">description)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(128, 0, 128);">@description</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 128);">@options</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 128);">@location</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;description</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;options</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;location<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;Optional&nbsp;hash&nbsp;passed&nbsp;to&nbsp;the&nbsp;example&nbsp;declaration</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attr_reader&nbsp;</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">options<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;This&nbsp;is&nbsp;the&nbsp;docstring&nbsp;passed&nbsp;to&nbsp;the&nbsp;&lt;tt&gt;it()&lt;/tt&gt;&nbsp;method&nbsp;or&nbsp;any<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;of&nbsp;its&nbsp;aliases</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attr_reader&nbsp;</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">description<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;The&nbsp;file&nbsp;and&nbsp;line&nbsp;number&nbsp;at&nbsp;which&nbsp;the&nbsp;represented&nbsp;example<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;was&nbsp;declared.&nbsp;This&nbsp;is&nbsp;extracted&nbsp;from&nbsp;&lt;tt&gt;caller&lt;/tt&gt;,&nbsp;and&nbsp;is&nbsp;therefore<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;formatted&nbsp;as&nbsp;an&nbsp;individual&nbsp;line&nbsp;in&nbsp;a&nbsp;backtrace.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attr_reader&nbsp;</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">location<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;Deprecated&nbsp;-&nbsp;use&nbsp;location()</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;backtrace<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Spec</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">deprecate(</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0); font-weight: bold;">ExampleProxy#backtrace</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0); font-weight: bold;">ExampleProxy#location</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;Convenience&nbsp;method&nbsp;for&nbsp;example&nbsp;group&nbsp;-&nbsp;updates&nbsp;the&nbsp;value&nbsp;of<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&lt;tt&gt;description&lt;/tt&gt;&nbsp;and&nbsp;returns&nbsp;self.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;update(description)&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;:nodoc:</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(128, 0, 128);">@description</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;description<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">(other)&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;:nodoc:</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(other</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">description&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;description)&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">&nbsp;(other</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">location&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;location)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;end<br />
end<br />
</span></div>
<br />
然后让should和should_not支持中文，修改lib\spec\expectations\handler.rb:<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">require</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0); font-weight: bold;">'</span><span style="color: rgb(0, 0, 0); font-weight: bold;">iconv</span><span style="color: rgb(0, 0, 0); font-weight: bold;">'</span><span style="color: rgb(0, 0, 0);"><br />
<br />
module&nbsp;Spec<br />
&nbsp;&nbsp;module&nbsp;Expectations<br />
&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;InvalidMatcherError&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;ArgumentError;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;PositiveExpectationHandler&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;self</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">handle_matcher(actual</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;message</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">nil</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">block)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">让should支持中文</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(actual</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">instance_of</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">&nbsp;String)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actual&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;Iconv</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">iconv(</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0); font-weight: bold;">UTF-8</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0); font-weight: bold;">GBK</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">actual)</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">first<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Spec</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Matchers</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">last_should&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">should<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Spec</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Matchers</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">last_matcher&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Spec</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Matchers</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">PositiveOperatorMatcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">new(actual)&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">nil</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">matches</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">(actual</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">block)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;match&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;match<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;</span><span style="color: rgb(0, 0, 0);">||=</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">respond_to</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">failure_message_for_should)&nbsp;</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">failure_message_for_should&nbsp;</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">failure_message<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">respond_to</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">diffable</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">)&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">diffable</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Spec</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Expectations</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">fail_with&nbsp;message</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">expected</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">first</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">actual<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Spec</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Expectations</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">fail_with&nbsp;message<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;NegativeExpectationHandler<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;self</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">handle_matcher(actual</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;message</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">nil</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">block)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">让should支持中文</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(actual</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">instance_of</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">&nbsp;String)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actual&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;Iconv</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">iconv(</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0); font-weight: bold;">UTF-8</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0); font-weight: bold;">GBK</span><span style="color: rgb(0, 0, 0); font-weight: bold;">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">actual)</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">first<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Spec</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Matchers</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">last_should&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">should_not<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Spec</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Matchers</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">last_matcher&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Spec</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Matchers</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">NegativeOperatorMatcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">new(actual)&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">nil</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">respond_to</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">does_not_match</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">)&nbsp;</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">does_not_match</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">(actual</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">block)&nbsp;</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">matches</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">(actual</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">block)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;match&nbsp;</span><span style="color: rgb(0, 0, 255);">unless</span><span style="color: rgb(0, 0, 0);">&nbsp;match<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;</span><span style="color: rgb(0, 0, 0);">||=</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">respond_to</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">failure_message_for_should_not)&nbsp;</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">failure_message_for_should_not&nbsp;</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">negative_failure_message<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">respond_to</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">diffable</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">)&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">diffable</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Spec</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Expectations</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">fail_with&nbsp;message</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">expected</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">first</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">actual<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Spec</span><span style="color: rgb(0, 0, 0);">::</span><span style="color: rgb(0, 0, 0);">Expectations</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">fail_with&nbsp;message<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;end<br />
end<br />
<br />
</span></div>
暂时我只用到这些元素，可能还不全面，有遇到问题的再加上。<br />
<img src ="http://www.blogjava.net/huaoguo/aggbug/305670.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huaoguo/" target="_blank">huaoguo</a> 2009-12-12 01:47 <a href="http://www.blogjava.net/huaoguo/archive/2009/12/12/305670.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>