<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>UKSTUDIO &#187; RSpec</title>
	<atom:link href="http://ukstudio.jp/tag/rspec/feed/" rel="self" type="application/rss+xml" />
	<link>http://ukstudio.jp</link>
	<description>いわゆる86世代のブログです</description>
	<lastBuildDate>Wed, 11 Jan 2012 05:53:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<div id='fb-root'></div>
					<script type='text/javascript'>
						window.fbAsyncInit = function()
						{
							FB.init({appId: null, status: true, cookie: true, xfbml: true});
						};
						(function()
						{
							var e = document.createElement('script'); e.async = true;
							e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
							document.getElementById('fb-root').appendChild(e);
						}());
					</script>	
						<item>
		<title>TDDBC 東京 1.6でサポートスタッフをやってきました</title>
		<link>http://ukstudio.jp/2011/08/04/tddbc_tokyo_1_6/</link>
		<comments>http://ukstudio.jp/2011/08/04/tddbc_tokyo_1_6/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 08:22:31 +0000</pubDate>
		<dc:creator>ukstudio</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[RSpec]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[tddbc]]></category>

		<guid isPermaLink="false">http://ukstudio.jp/?p=889</guid>
		<description><![CDATA[TDD Boot Camp 東京 1.6にRubyのサポートスタッフとして参加してきた。 当初の予定ではあくまでサポートなのでペアプロには参加しない予定だったけど、Rubyのグループが5人で人数が奇数になってしまったので急遽ペアプロに参加することにした。 この辺は@t_wadaさんや主催の@pocketberserkerさんとも相談してペアとトリオのふたつに分けるっていう話もあったけれど、僕が「せっかくだからペアプロして帰ってもらいたい」と思ったので若干の迷いはあれどペアプロに参加することにしたのでした。Ruby組は@takahashimさんや@1syoさん、@kwappaさんたちが参加されていて彼らなら付きっ切りでサポートしなくても大丈夫そうというのも理由のひとつ。 コードレビューを見た感じだと一応はうまくいったんじゃないかなと思う。特に@1syoさんと@takahashimさんのペア(ダブル高橋!)は積極的に質問をしてくれたので、僕としても教えがいがあった(えらそう)。ただ、質問を受けると僕の方のペアプロが一時的に中断してしまうし、僕としても頭の切り替えが結構大変だったので出来ることならやはり参加者同士でペアが組めるといいんだろうなぁ。理想を言うと全部のペアをスタッフ+参加者にすることなんだろうけど、あまり現実的じゃなさそう。 今回、最初に僕とペアを組んだ方が(お名前を聞くのを忘れてしまった&#8230;)モダンなテストの書き方を知りたいと言うので、ある程度xUnit的なテストの書き方でペアプロを進めた後、がっつりRSpec的な書き方にリファクタリングするということをやってみた。他のペアもRSpecは初期のit "なんちゃらかんちゃら"の書き方をされていたので、コードレビュー時に共有できたのはよかったのかな。RSpecの書き方については言っちゃいけないということはないだろうから言っちゃうけどそのうちるびまの方に書く予定なのでお楽しみに。 Ruby組は全体的にTDDのサイクル自体はできていた感じで、内容としてはテストの書き方にフォーカスが移っていたように感じる。例えば、標準出力が絡むテストのやり方とか、システム時刻が絡むテストのやり方とかdescribe/contextの切り方とか。多分、TDDBCも回数が増えていくにつれ、こういう人達がどんどん増えてくると思うからTDDBCの次の道をしめせるといいんじゃないかと思った。参考図書はいくつかあるけど、例えばxUTPとかTDDBCからのジャンプアップがヘビーすぎるなぁという気もする。(もちろんいきなりあれを全部読めという話でもないんだけれど) 話は変わって当日のお題を再度ひとりで実装してみたので、コードを公開しておきます。 ukstudio/tddbc1.6 &#8211; GitHub あまりじっくり書いたって感じでもないので仕様漏れとかありそうだけど、テストコードの書き方の参考にはなるかと思います。@bleisさんみたいに細かに解説しようと思ったけど気力がないのでした。 そういえば今回のスタッフも若手が多いな。@bleisさんと俺が86世代、@kyonn_mmさんと@pocketberserkerさんがひとつだかふたつだか年下だっけ? 同世代の人が頑張ってるのはとても刺激になります。 最後に、主催の@pocketberserkerさん、講演をしてくださった@t_wadaさんをはじめ、スタッフの方々どうもお疲れ様でした。参加者のみなさま、どうもありがとうございました。 特に@pocketberserkerさんは佐賀の人なのにもかかわらず東京でTDDBC主催とか、そのパワフルさを見習いたい感じです。本当にお疲れ様でした。 おまけ]]></description>
			<content:encoded><![CDATA[				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2011/08/04/tddbc_tokyo_1_6/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p><a href="http://www.zusaar.com/event/agZ6dXNhYXJyDQsSBUV2ZW50GPGlAww">TDD Boot Camp 東京 1.6</a>にRubyのサポートスタッフとして参加してきた。</p>
				<p>当初の予定ではあくまでサポートなのでペアプロには参加しない予定だったけど、Rubyのグループが5人で人数が奇数になってしまったので急遽ペアプロに参加することにした。</p>
				<p>この辺は@t_wadaさんや主催の@pocketberserkerさんとも相談してペアとトリオのふたつに分けるっていう話もあったけれど、僕が「せっかくだからペアプロして帰ってもらいたい」と思ったので若干の迷いはあれどペアプロに参加することにしたのでした。Ruby組は@takahashimさんや@1syoさん、@kwappaさんたちが参加されていて彼らなら付きっ切りでサポートしなくても大丈夫そうというのも理由のひとつ。</p>
				<p>コードレビューを見た感じだと一応はうまくいったんじゃないかなと思う。特に@1syoさんと@takahashimさんのペア(ダブル高橋!)は積極的に質問をしてくれたので、僕としても教えがいがあった(えらそう)。ただ、質問を受けると僕の方のペアプロが一時的に中断してしまうし、僕としても頭の切り替えが結構大変だったので出来ることならやはり参加者同士でペアが組めるといいんだろうなぁ。理想を言うと全部のペアをスタッフ+参加者にすることなんだろうけど、あまり現実的じゃなさそう。</p>
				<p>今回、最初に僕とペアを組んだ方が(お名前を聞くのを忘れてしまった&#8230;)モダンなテストの書き方を知りたいと言うので、ある程度xUnit的なテストの書き方でペアプロを進めた後、がっつりRSpec的な書き方にリファクタリングするということをやってみた。他のペアもRSpecは初期の<code>it "なんちゃらかんちゃら"</code>の書き方をされていたので、コードレビュー時に共有できたのはよかったのかな。RSpecの書き方については言っちゃいけないということはないだろうから言っちゃうけどそのうちるびまの方に書く予定なのでお楽しみに。</p>
				<p>Ruby組は全体的にTDDのサイクル自体はできていた感じで、内容としてはテストの書き方にフォーカスが移っていたように感じる。例えば、標準出力が絡むテストのやり方とか、システム時刻が絡むテストのやり方とかdescribe/contextの切り方とか。多分、TDDBCも回数が増えていくにつれ、こういう人達がどんどん増えてくると思うからTDDBCの次の道をしめせるといいんじゃないかと思った。参考図書はいくつかあるけど、例えばxUTPとかTDDBCからのジャンプアップがヘビーすぎるなぁという気もする。(もちろんいきなりあれを全部読めという話でもないんだけれど)</p>
				<p>話は変わって当日のお題を再度ひとりで実装してみたので、コードを公開しておきます。</p>
				<p><a href="https://github.com/ukstudio/tddbc1.6">ukstudio/tddbc1.6 &#8211; GitHub</a></p>
				<p>あまりじっくり書いたって感じでもないので仕様漏れとかありそうだけど、テストコードの書き方の参考にはなるかと思います。@bleisさんみたいに細かに解説しようと思ったけど気力がないのでした。</p>
				<p>そういえば今回のスタッフも若手が多いな。@bleisさんと俺が86世代、@kyonn_mmさんと@pocketberserkerさんがひとつだかふたつだか年下だっけ? 同世代の人が頑張ってるのはとても刺激になります。</p>
				<p>最後に、主催の@pocketberserkerさん、講演をしてくださった@t_wadaさんをはじめ、スタッフの方々どうもお疲れ様でした。参加者のみなさま、どうもありがとうございました。</p>
				<p>特に@pocketberserkerさんは佐賀の人なのにもかかわらず東京でTDDBC主催とか、そのパワフルさを見習いたい感じです。本当にお疲れ様でした。</p>
				<p>おまけ<br />
				<script src="https://gist.github.com/1124762.js"> </script></p>
				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2011/08/04/tddbc_tokyo_1_6/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>
]]></content:encoded>
			<wfw:commentRss>http://ukstudio.jp/2011/08/04/tddbc_tokyo_1_6/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>RSpec日本語化計画</title>
		<link>http://ukstudio.jp/2010/12/14/rspec_japanize/</link>
		<comments>http://ukstudio.jp/2010/12/14/rspec_japanize/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 10:10:26 +0000</pubDate>
		<dc:creator>ukstudio</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[RSpec]]></category>

		<guid isPermaLink="false">http://ukstudio.jp/?p=761</guid>
		<description><![CDATA[やっぱ僕達は日本人なので仕様記述的と言うからには日本語で書きたい。とりあえずRubyは日本語を一応識別子に使えるのでその辺で適当にやってみた。shouldが鬼門すぎるのだがどうしたもんか。「it should_not 空であること」って明らかにおかしすぎる。@takaiさんが少し修正してくれた。 本当はもっとちゃんとした記事を書くつもりだったんだけどなんか脇道にそれてしまった。]]></description>
			<content:encoded><![CDATA[				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2010/12/14/rspec_japanize/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>やっぱ僕達は日本人なので仕様記述的と言うからには日本語で書きたい。とりあえずRubyは日本語を一応識別子に使えるのでその辺で適当にやってみた。<del datetime="2010-12-14T10:26:03+00:00">shouldが鬼門すぎるのだがどうしたもんか。「it should_not 空であること」って明らかにおかしすぎる。</del>@takaiさんが少し修正してくれた。</p>
				<p><script src="https://gist.github.com/740240.js?file=hoge_spec.rb"></script></p>
				<p>本当はもっとちゃんとした記事を書くつもりだったんだけどなんか脇道にそれてしまった。</p>
				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2010/12/14/rspec_japanize/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>
]]></content:encoded>
			<wfw:commentRss>http://ukstudio.jp/2010/12/14/rspec_japanize/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RSpec2+Rails3+autotest環境の構築</title>
		<link>http://ukstudio.jp/2010/09/03/rspec2_rails3_autotes/</link>
		<comments>http://ukstudio.jp/2010/09/03/rspec2_rails3_autotes/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 05:36:14 +0000</pubDate>
		<dc:creator>ukstudio</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[RSpec]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ukstudio.jp/?p=678</guid>
		<description><![CDATA[9月からやる仕事がめでたく、Rails3.0 + Ruby1.9.2のお仕事なので色々と環境構築。とりあえず自動テストまわりやりました。 一応、環境を他と切り分けるために、rvmでアプリ用にgemsetを用意。アプリごとに簡単に環境を構築できるrvmマジ便利。 gem install bundler --pre gem install rails まずは、bundlerとrailsをインストール。次は適当なアプリを作って必要なgemのインストールなどを行う。テストはRSpecで書くので、-TをつけてTest/Unitは使わないようにする。 rails new demo -T 次に必要なgemをGemfileに記述。rspecとかを「テストだけだから」と思って、gropu :testにしたら、モデルを作成したときにTest/Unitのテストコードが作られたりしたので注意。githubのWikiを見るとautotestのgemは不要そうなんだけど、実際ないとうまくautotestが動かなかた。 bundle install あとはモデルを作って、テストが実行できればOK。 rails g rspec:install rails g model user rake autotest 追記 Twitterで@conceal_rsさんから補足ありました。ありがとうございます! .bbpBox22863518878 {background:url(http://s.twimg.com/a/1282682459/images/themes/theme1/bg.png) #000000;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 [...]]]></description>
			<content:encoded><![CDATA[				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2010/09/03/rspec2_rails3_autotes/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>9月からやる仕事がめでたく、Rails3.0 + Ruby1.9.2のお仕事なので色々と環境構築。とりあえず自動テストまわりやりました。</p>
				<p>一応、環境を他と切り分けるために、rvmでアプリ用にgemsetを用意。アプリごとに簡単に環境を構築できるrvmマジ便利。</p>
				<pre>
gem install bundler --pre
gem install rails
</pre>
				<p>まずは、bundlerとrailsをインストール。次は適当なアプリを作って必要なgemのインストールなどを行う。テストはRSpecで書くので、-TをつけてTest/Unitは使わないようにする。</p>
				<pre>
rails new demo -T
</pre>
				<p>次に必要なgemをGemfileに記述。rspecとかを「テストだけだから」と思って、gropu :testにしたら、モデルを作成したときにTest/Unitのテストコードが作られたりしたので注意。githubの<a href='http://ja.wiki.github.com/rspec/rspec/autotest/'>Wiki</a>を見るとautotestのgemは不要そうなんだけど、実際ないとうまくautotestが動かなかた。</p>
				<p><script src="http://gist.github.com/563447.js?file=Gemfile"></script></p>
				<pre>
bundle install
</pre>
				<p>あとはモデルを作って、テストが実行できればOK。</p>
				<pre>
rails g rspec:install
rails g model user
rake
autotest
</pre>
				<h3>追記</h3>
				<p>Twitterで@conceal_rsさんから補足ありました。ありがとうございます!<br />
				<!-- http://twitter.com/conceal_rs/status/22863518878 --><br />
				<style type='text/css'>.bbpBox22863518878 {background:url(http://s.twimg.com/a/1282682459/images/themes/theme1/bg.png) #000000;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style>
				<div class='bbpBox22863518878'>
				<p class='bbpTweet'>@<a class="tweet-url username" href="http://twitter.com/ukstudio" rel="nofollow">ukstudio</a> ZenTestとautotest-railsはなくても大丈夫ですよ。あとrspecは2.0.0.beta.20からwebratに依存しなくなったのでhave_selectorとか使えなくなってます。gem &#8216;webrat&#8217;もあった方がいいかも<span class='timestamp'><a title='Fri Sep 03 05:41:18 +0000 2010' href='http://twitter.com/conceal_rs/status/22863518878'>less than a minute ago</a> via <a href="http://termtter.org/" rel="nofollow">Termtter</a></span><span class='metadata'><span class='author'><a href='http://twitter.com/conceal_rs'><img src='http://a1.twimg.com/profile_images/327755757/twitterProfilePhoto_normal.jpg' /></a><strong><a href='http://twitter.com/conceal_rs'>Shin-ichiro OGAWA</a></strong><br/>conceal_rs</span></span></p>
				</div>
				<p> <!-- end of tweet --></p>
				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2010/09/03/rspec2_rails3_autotes/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>
]]></content:encoded>
			<wfw:commentRss>http://ukstudio.jp/2010/09/03/rspec2_rails3_autotes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TDD Boot Campに参加してきました</title>
		<link>http://ukstudio.jp/2010/01/06/tddbc/</link>
		<comments>http://ukstudio.jp/2010/01/06/tddbc/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 07:37:46 +0000</pubDate>
		<dc:creator>ukstudio</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[RSpec]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[tddbc]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://ukstudio.jp/?p=469</guid>
		<description><![CDATA[これまた、割と今更なエントリ。当日は@t_wadaさんのお誘いでRubyグループのコーチ役として参加したけどあまりコーチらしいことしてないな・・・申し訳ない。 TDD Boot Camp(以下tddbc)では、午前中に @t_wada さんと Lasse氏 の講演、午後は各言語ごとにグループを作りペアプログラミング。朝から夜にかけてがっつりなイベントだった。TDDをやりたくてもやり方がわからない、やってみたはいいけど上手くいかないって人にはとてもいいイベントだったんじゃなかろうか。実際、僕も色々と得るものがあった。 とりあえず、当日のお題をあとで自分で書いたものを晒しておく。スレッドセーフ以外の仕様変更まで取りこんである。 http://github.com/ukstudio/LRUCache これは1つのクラスにまとめてあるけど、結構複雑な感じになってきているので、CacheItemみたいな感じでもう1つ別のクラスを作ってそっちにキャッシュの保存期限とか持たせた方がいいかもしれない。仮にここからクラスを抽出するとしてこれだけテストが書いてあればそんなに苦労せずに抽出できるはず。テストがあるからこそクラスを抽出させるという変更も恐れることなく対応できる。 Fixnum#seconds_laterはLasse氏のを参考にした。個人的にStubの影響をブロックの中だけに限定させたかったので少し修正してある。あとは、Rspecの機能で言うと、subjectやカスタムマッチャを使ってる。それぞれそんなに難しくないので使ってみることをおすすめする。 最後にちょろっと感想を伸べておくと、tddbcはとても素晴しいイベントだったと思う。 @ebackyさんや、来日してくれたLasse氏をはじめ、スタッフのみなさん、今回このようなイベントを開催してくれて本当にありがとうございました。また参加された皆様からも色々な気づきを得られました。ありがとうございます。 僕はTDDでプログラマの階段を更に1歩登れたように思う。ハッキリ言って、TDDを知る前と知った後のコードにはかなりの差がある。なにより、TDDでのプログラミングは楽しい。tddbcに参加された皆様もこの楽しさを知ってもらえればと思う。]]></description>
			<content:encoded><![CDATA[				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2010/01/06/tddbc/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>これまた、割と今更なエントリ。当日は@t_wadaさんのお誘いでRubyグループのコーチ役として参加したけどあまりコーチらしいことしてないな・・・申し訳ない。</p>
				<p>TDD Boot Camp(以下tddbc)では、午前中に @t_wada さんと Lasse氏 の講演、午後は各言語ごとにグループを作りペアプログラミング。朝から夜にかけてがっつりなイベントだった。TDDをやりたくてもやり方がわからない、やってみたはいいけど上手くいかないって人にはとてもいいイベントだったんじゃなかろうか。実際、僕も色々と得るものがあった。</p>
				<p>とりあえず、当日のお題をあとで自分で書いたものを晒しておく。スレッドセーフ以外の仕様変更まで取りこんである。</p>
				<p><a href="http://github.com/ukstudio/LRUCache">http://github.com/ukstudio/LRUCache</a></p>
				<p>これは1つのクラスにまとめてあるけど、結構複雑な感じになってきているので、CacheItemみたいな感じでもう1つ別のクラスを作ってそっちにキャッシュの保存期限とか持たせた方がいいかもしれない。仮にここからクラスを抽出するとしてこれだけテストが書いてあればそんなに苦労せずに抽出できるはず。テストがあるからこそクラスを抽出させるという変更も恐れることなく対応できる。</p>
				<p>Fixnum#seconds_laterはLasse氏のを参考にした。個人的にStubの影響をブロックの中だけに限定させたかったので少し修正してある。あとは、Rspecの機能で言うと、subjectやカスタムマッチャを使ってる。それぞれそんなに難しくないので使ってみることをおすすめする。</p>
				<p>最後にちょろっと感想を伸べておくと、tddbcはとても素晴しいイベントだったと思う。 @ebackyさんや、来日してくれたLasse氏をはじめ、スタッフのみなさん、今回このようなイベントを開催してくれて本当にありがとうございました。また参加された皆様からも色々な気づきを得られました。ありがとうございます。</p>
				<p>僕はTDDでプログラマの階段を更に1歩登れたように思う。ハッキリ言って、TDDを知る前と知った後のコードにはかなりの差がある。なにより、TDDでのプログラミングは楽しい。tddbcに参加された皆様もこの楽しさを知ってもらえればと思う。</p>
				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2010/01/06/tddbc/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>
]]></content:encoded>
			<wfw:commentRss>http://ukstudio.jp/2010/01/06/tddbc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RSpecでprivateメソッドをテストする</title>
		<link>http://ukstudio.jp/2009/11/02/testing_private_method/</link>
		<comments>http://ukstudio.jp/2009/11/02/testing_private_method/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 19:50:17 +0000</pubDate>
		<dc:creator>ukstudio</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[RSpec]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ukstudio.jp/?p=437</guid>
		<description><![CDATA[Object#send(__send__)ならメソッドの呼び出し制限に関わらずメソッドを呼び出すことが可能なので、privateメソッドもテスト可能。 確か、1.9以降はメソッド呼び出し制限がObject#sendにも影響するとどこかで見た記憶があるのだけど結局そうはなっていないみたい。 1.9.1、1.8.7で確認済み。 ちなみにオマケ。 Pythonはメソッド名の前にアンダースコアを2つけるとprivateなメソッドになるのだけれど、実際のところ別名でメソッドを定義してそちらを呼び出してるっぽい。別名で定義された方はprivateではないので、そちらを呼び出してテストすることが可能。 他にもJavaだったらsetAccessible(True)を実行すればpublicなメソッドに変更されるのでテスト可能。と聞いただけで確認はしていない。]]></description>
			<content:encoded><![CDATA[				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2009/11/02/testing_private_method/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p><script src="http://gist.github.com/223674.js"></script></p>
				<p>Object#send(__send__)ならメソッドの呼び出し制限に関わらずメソッドを呼び出すことが可能なので、privateメソッドもテスト可能。</p>
				<p>確か、1.9以降はメソッド呼び出し制限がObject#sendにも影響するとどこかで見た記憶があるのだけど結局そうはなっていないみたい。</p>
				<p>1.9.1、1.8.7で確認済み。</p>
				<p>ちなみにオマケ。<br />
				<script src="http://gist.github.com/223679.js"></script></p>
				<p>Pythonはメソッド名の前にアンダースコアを2つけるとprivateなメソッドになるのだけれど、実際のところ別名でメソッドを定義してそちらを呼び出してるっぽい。別名で定義された方はprivateではないので、そちらを呼び出してテストすることが可能。</p>
				<p>他にもJavaだったらsetAccessible(True)を実行すればpublicなメソッドに変更されるのでテスト可能。と聞いただけで確認はしていない。</p>
				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2009/11/02/testing_private_method/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>
]]></content:encoded>
			<wfw:commentRss>http://ukstudio.jp/2009/11/02/testing_private_method/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>RSpecの結果をHTMLで出力する方法</title>
		<link>http://ukstudio.jp/2009/01/09/rspec_result_output_html/</link>
		<comments>http://ukstudio.jp/2009/01/09/rspec_result_output_html/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 20:13:37 +0000</pubDate>
		<dc:creator>ukstudio</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[RSpec]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ukstudio.jp/?p=289</guid>
		<description><![CDATA[RSpecにはオプション-hがあるので、そこでフォーマットを指定してやればいい。以下、Railsの例。 RAILS_ROOT$ spec spec -f h:spec/spec_report.html これで、specディレクトリにspec_report.htmlが出力される。]]></description>
			<content:encoded><![CDATA[				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2009/01/09/rspec_result_output_html/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>RSpecにはオプション-hがあるので、そこでフォーマットを指定してやればいい。以下、Railsの例。</p>
				<pre lang="bash">
RAILS_ROOT$ spec spec -f h:spec/spec_report.html
</pre>
				<p>これで、specディレクトリにspec_report.htmlが出力される。</p>
				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2009/01/09/rspec_result_output_html/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>
]]></content:encoded>
			<wfw:commentRss>http://ukstudio.jp/2009/01/09/rspec_result_output_html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rails.vimのファイル切り替えをRSpecに対応させる(仮)</title>
		<link>http://ukstudio.jp/2008/06/05/rails_vim_rspec/</link>
		<comments>http://ukstudio.jp/2008/06/05/rails_vim_rspec/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 03:02:04 +0000</pubDate>
		<dc:creator>ukstudio</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[RSpec]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://uk-studio.net/2008/06/05/rails_vim_rspec/</guid>
		<description><![CDATA[rails.vimをインストールすると、RcontrollerとかRmodelコマンドでRSpecファイルからControllerやModelファイルに切り替えることができるんだけど、その逆ができないので対応させた。仮なのはVimスクリプトをちゃんと書けなくてコピペのごまかしだから。 書きかえるファイルは~/.vim/autoload/rails.vim。一応行数も書いたけどもしかしたらズレてるかもしれないので参考程度に。あと、バージョンは2.0使ってる。 まずは、:Rspec、:Rspeccontroller、:Rspecmodelを呼び出せるようにする。 1777 call s:addfilecmds("integrationtest") 1778 call s:addfilecmds("spec") 1779 call s:addfilecmds("speccontroller") 1780 call s:addfilecmds("specmodel") 1781 call s:addfilecmds("stylesheet") なんでわざわざ3つあるのかと言うと、「:Rspec hoge」ってやった時にControllerのスペックなのか、Modelのスペックなのか判断する方法がわからなかったから。だからとりあえず「:Rspec」とやったときは、今開いているファイルに対応するスペックファイルを開き、個別に指定して開きたいときは「:Rspeccontroller hoge」もしくは「:Rspecmodel hoge」で明示的にControllerかModelかを指定するようにした。 次に「:Rspeccontroller [tab]」や「:Rspecmodel [tab]」としたときに、スペック名を補完できるようにfunctionを追加する。 1941 function! s:speccontrollerList(A,L,P) 1942 return s:autocamelize(s:relglob("spec/controllers/",s:recurse,"_controller_spec.rb"),a:A) 1943 endfunction 1944 1945 function! s:specmodelList(A,L,P) 1946 return s:autocamelize(s:relglob("spec/models/",s:recurse,"_spec.rb"),a:A) 1947 endfunction 最後に実際にファイルを開く部分。2331、2334、2340、2345の&#8221;spec&#8221;、&#8221;speccontroller&#8221;、&#8221;specmodel&#8221;が最初に設定したaddfilecmdsの引数と対応するっぽい。なのでfunction名はなんでもいいと思うけど、とりあえず他のに合わせた。 specEditは「:Rspec」に対応していて、開いたファイルがControllerかModelかで開くスペックファイルもかわる。speccontrollerEditとspecmodelEditはControllerかModelどちらか決まったものしか開かない。 2328 function! s:specEdit(bang,cmd,...) 2329 if s:model() != '' 2330 let f [...]]]></description>
			<content:encoded><![CDATA[				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2008/06/05/rails_vim_rspec/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>rails.vimをインストールすると、RcontrollerとかRmodelコマンドでRSpecファイルからControllerやModelファイルに切り替えることができるんだけど、その逆ができないので対応させた。仮なのはVimスクリプトをちゃんと書けなくてコピペのごまかしだから。</p>
				<p>書きかえるファイルは~/.vim/autoload/rails.vim。一応行数も書いたけどもしかしたらズレてるかもしれないので参考程度に。あと、バージョンは2.0使ってる。</p>
				<p>まずは、:Rspec、:Rspeccontroller、:Rspecmodelを呼び出せるようにする。</p>
				<pre lang="vim">
1777   call s:addfilecmds("integrationtest")
1778   call s:addfilecmds("spec")
1779   call s:addfilecmds("speccontroller")
1780   call s:addfilecmds("specmodel")
1781   call s:addfilecmds("stylesheet")
</pre>
				<p>なんでわざわざ3つあるのかと言うと、「:Rspec hoge」ってやった時にControllerのスペックなのか、Modelのスペックなのか判断する方法がわからなかったから。だからとりあえず「:Rspec」とやったときは、今開いているファイルに対応するスペックファイルを開き、個別に指定して開きたいときは「:Rspeccontroller hoge」もしくは「:Rspecmodel hoge」で明示的にControllerかModelかを指定するようにした。</p>
				<p>次に「:Rspeccontroller [tab]」や「:Rspecmodel [tab]」としたときに、スペック名を補完できるようにfunctionを追加する。</p>
				<pre lang="vim">
1941 function! s:speccontrollerList(A,L,P)
1942   return s:autocamelize(s:relglob("spec/controllers/",s:recurse,"_controller_spec.rb"),a:A)
1943 endfunction
1944
1945 function! s:specmodelList(A,L,P)
1946   return s:autocamelize(s:relglob("spec/models/",s:recurse,"_spec.rb"),a:A)
1947 endfunction
</pre>
				<p>最後に実際にファイルを開く部分。2331、2334、2340、2345の&#8221;spec&#8221;、&#8221;speccontroller&#8221;、&#8221;specmodel&#8221;が最初に設定したaddfilecmdsの引数と対応するっぽい。なのでfunction名はなんでもいいと思うけど、とりあえず他のに合わせた。</p>
				<p>specEditは「:Rspec」に対応していて、開いたファイルがControllerかModelかで開くスペックファイルもかわる。speccontrollerEditとspecmodelEditはControllerかModelどちらか決まったものしか開かない。</p>
				<pre lang="vim">
2328 function! s:specEdit(bang,cmd,...)
2329   if s:model() != ''
2330     let f = s:model()
2331     return s:EditSimpleRb(a:bang,a:cmd,"spec",f,"spec/models/","_spec.rb")
2332   else
2333     let f = s:controller()
2334     return s:EditSimpleRb(a:bang,a:cmd,"spec",f,"spec/controllers/","_controller_spec.rb")
2335   endif
2336 endfunction
2337
2338 function! s:speccontrollerEdit(bang,cmd,...)
2339   let f = s:controller()
2340   return s:EditSimpleRb(a:bang,a:cmd,"speccontroller",f,"spec/controllers/","_controller_spec.rb")
2341 endfunction
2342
2343 function! s:specmodelEdit(bang,cmd,...)
2344   let f = s:model()
2345   return s:EditSimpleRb(a:bang,a:cmd,"specmodel",f,"spec/models/","_spec.rb")
2346 endfunction
</pre>
				<p>とりあえず、現状の設定で簡易的にRSpecに対応させることができる。「:Rspec」の存在が気持ち悪いのであれば、それは消して開いているファイルがControllerかModelか自分で判断して「:Rspeccontroller」か「:Rspecmodel」を使いわければいいと思う。「:Rspec [tab]」でエラーが出るし個人的には気持ちわるいんだけど、対応させたスペックを開くことの方がおおいし、その時は短いコマンドの方が都合がいいのでここらへんは妥協。今回Viewには対応させていないけれど、同じ要領でできるはず。</p>
				<p>rails.vimを少しよんだだけだし、実際の動作もまともに検証してないので変な動作したらごめんなさい。まぁ致命的な問題は起きないだろうけど。正式にrails.vimがRSpecに対応してくれるといいんだけどね。</p>
				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2008/06/05/rails_vim_rspec/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>
]]></content:encoded>
			<wfw:commentRss>http://ukstudio.jp/2008/06/05/rails_vim_rspec/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>MacBookにRailsの自動テスト環境を構築した</title>
		<link>http://ukstudio.jp/2008/03/14/autotest_for_macbook/</link>
		<comments>http://ukstudio.jp/2008/03/14/autotest_for_macbook/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 02:55:06 +0000</pubDate>
		<dc:creator>ukstudio</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[RSpec]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://uk-studio.net/2008/03/14/autotest_for_macbook/</guid>
		<description><![CDATA[なんかautotestが流行りつつある今日この頃ですが、みなさまいかがお過ごしでしょうか。とりあえず丁度うちの会社でも自動テストしようかーみたいな話がでてたので構築してみましたよ! ZenTestのインストール とりあえずは定番のZenTest(autotest)とRedGreen(結果の色付け)をインストールします。 $ sudo gem install ZenTest $ sudo gem install RedGreen 次にautotestの設定ファイルの作成。example_dot_autotest.rbのパスは人によって違うと思うので適当に読み替えてください。 cp /opt/local/lib/ruby/gems/1.8/gems/ZenTest-3.9.1/example_dot_autotest.rb ~/.autotest ~/.autotestの15行目のコメントアウトを解除。 require 'autotest/redgreen' RAILS_ROOTでautotestを実行。起動時に全部のテストを実行するのでちょっとだけ重くなるかもしれません。それ以降はテストファイルやモデル、コントローラファイルなどを修正する度に該当のテストが走ります。 $ cd RAILS_ROOT $ autotest 実行するテストはtest/unit、もしくはRailsにRSpecが入れてあればRspecのテストを実行します。 なんかspec_serverを立ち上げておくと処理が早くなるらしいですがよくわかってないです。まぁとりあえず設定しといて損はなさそうです。 $ vi spec/spec.opts # 最下行に --drb を追記。drbでテスト用サーバへ繋ぐようになります。 $ ruby script/spec_server テストの結果は成功なら緑色のバーが、失敗なら赤色のバーが表示されます。 結果通知用にGrowlとScreenの設定をする これでも自動テストは走るので問題ないですが、結果を見るのがちょっと面倒ですね。ということでGrowlとScreenで結果が見えるようにしましょう。 screenの場合は角谷さんのエントリーを見るといいと思います。基本的にそのまま~/.autotestにコピペするだけで問題ないはずです。 require 'autotest/screen' # コメントアウトを外す Autotest::HOOKS.delete(:interrupt) Autotest::Screen.statusline = %q[&#124;%c %m/%d&#124;%w %=] class Autotest::Screen SCREEN_COLOR[:green] [...]]]></description>
			<content:encoded><![CDATA[				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2008/03/14/autotest_for_macbook/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>なんかautotestが流行りつつある今日この頃ですが、みなさまいかがお過ごしでしょうか。とりあえず丁度うちの会社でも自動テストしようかーみたいな話がでてたので構築してみましたよ!</p>
				<h2>ZenTestのインストール</h2>
				<p>とりあえずは定番のZenTest(autotest)とRedGreen(結果の色付け)をインストールします。</p>
				<pre lang="bash">
$ sudo gem install ZenTest
$ sudo gem install RedGreen
</pre>
				<p>次にautotestの設定ファイルの作成。example_dot_autotest.rbのパスは人によって違うと思うので適当に読み替えてください。</p>
				<pre lang="bash">
cp /opt/local/lib/ruby/gems/1.8/gems/ZenTest-3.9.1/example_dot_autotest.rb ~/.autotest
</pre>
				<p>~/.autotestの15行目のコメントアウトを解除。</p>
				<pre lang="ruby">
require 'autotest/redgreen'
</pre>
				<p>RAILS_ROOTでautotestを実行。起動時に全部のテストを実行するのでちょっとだけ重くなるかもしれません。それ以降はテストファイルやモデル、コントローラファイルなどを修正する度に該当のテストが走ります。</p>
				<pre lang="bash">
$ cd RAILS_ROOT
$ autotest
</pre>
				<p>実行するテストはtest/unit、もしくはRailsにRSpecが入れてあればRspecのテストを実行します。</p>
				<p>なんかspec_serverを立ち上げておくと処理が早くなるらしいですがよくわかってないです。まぁとりあえず設定しといて損はなさそうです。</p>
				<pre lang="bash">
$ vi spec/spec.opts # 最下行に --drb を追記。drbでテスト用サーバへ繋ぐようになります。
$ ruby script/spec_server
</pre>
				<p>テストの結果は成功なら緑色のバーが、失敗なら赤色のバーが表示されます。</p>
				<h2>結果通知用にGrowlとScreenの設定をする</h2>
				<p>これでも自動テストは走るので問題ないですが、結果を見るのがちょっと面倒ですね。ということでGrowlとScreenで結果が見えるようにしましょう。</p>
				<p>screenの場合は<a href="http://kakutani.com/20070912.html#p02">角谷さんのエントリーを</a>見るといいと思います。基本的にそのまま~/.autotestにコピペするだけで問題ないはずです。</p>
				<pre lang="ruby">
require 'autotest/screen'   # コメントアウトを外す

Autotest::HOOKS.delete(:interrupt)
Autotest::Screen.statusline = %q[|%c %m/%d|%w %=]

class Autotest::Screen
  SCREEN_COLOR[:green] = 'gw'
  SCREEN_COLOR[:yellow] = 'yk'

  Autotest.add_hook :run_command do |at|
    message 'Running' if execute?
  end

  Autotest.add_hook :quit do |at|
    clear if execute?
  end

  Autotest.add_hook :ran_command do |at|
    return unless execute?
    results = [at.results].flatten.join("¥n")
    output = results.slice(/(¥d+)¥sexamples?,¥s*(¥d+)¥s.*failures?(?:,¥s*(¥d+)¥s.*pendings?)?/)
    if output
      ex,fail,pend = $~.captures.map {|e| e.to_i}
      if 0 < fail
        message "FAIL #{ex}ex, F:#{fail} ", :red
      elsif 0 < pend
        message "Pend #{ex}ex, F:#{fail} P:#{pend}", :yellow
      else
        message "All Green #{ex}ex", :green
      end
    end
  end
end
</pre>
				<p>この設定でscreenとautotestを起動しておくと、ステータスバーの右側にテストの結果が表示されます。</p>
				<p><img src="http://img.skitch.com/20080314-d6gq6bsmbbxh99ynx349bfcckf.jpg" alt="autotest"/></p>
				<p>これ貼ってから気づいたけど、Terminalから透けてみえる絵がなんかあれですなw</p>
				<p>次にGlowlの設定ですが、Leopardではruby-growlのインストールが必要っぽいです。とりあえずmacportsからインストールしておきましょう。それとGrowlの設定でリモートを許可しておきましょう。</p>
				<pre lang="bash">
$ sudo port install ruby-glowl
</pre>
				<p><img src="http://img.skitch.com/20080314-r92e97nip77qfj7u4p2a1ch8e6.jpg" alt="Growl"/></p>
				<p>Growlで結果を通知するにはgrowlnotifyのインストールが必要です。もしインストールしていなければ<a href="http://growl.info/">本家</a>からdmgファイルをDLし、その中にあるinstall.shを実行します。</p>
				<pre lang="bash">
$ cp -r /Volumes/Growl\ 1.1.2/Extras/growlnotify ~/tmp
$ cd ~/tmp/growlnotify
$ sudo ./install.sh
$ growlnotify -m "hoge" # growlの通知が表示されればインストール完了
</pre>
				<p>~/.autotestを修正し、glowlで結果が通知されるようにします。</p>
				<pre lang="ruby">
require 'autotest/glowl' # コメントアウトを解除
</pre>
				<p>これでテストが失敗したとき、失敗から成功になったときにGrowlが通知してくれます。Growlの見た目を変更しようと思ったけれど、個人的にscreenだけで十分だったので今回はナシ。</p>
				<p>とりあえず自動テストはテストを書くのが楽しくなりますな。オススメ。</p>
				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2008/03/14/autotest_for_macbook/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>
]]></content:encoded>
			<wfw:commentRss>http://ukstudio.jp/2008/03/14/autotest_for_macbook/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>test/unitで書いたテストにRSpecでテストを追記する方法</title>
		<link>http://ukstudio.jp/2008/03/04/from_unittest_to_rspec/</link>
		<comments>http://ukstudio.jp/2008/03/04/from_unittest_to_rspec/#comments</comments>
		<pubDate>Mon, 03 Mar 2008 22:47:01 +0000</pubDate>
		<dc:creator>ukstudio</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[RSpec]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://uk-studio.net/2008/03/04/from_unittest_to_rspec/</guid>
		<description><![CDATA[10分ぐらい調べて試してみただけだけど。 require 'rubygems' require 'test/unit' require 'spec' class TestArray < Test::Unit::TestCase # test/unit def test_1 assert_equal(0, Array.new.size) end # rspec describe Array, "when empty" do before do @empty_array = [] end it "should be empty" do @empty_array.should be_empty end it "should size 0" do @empty_array.size.should == 0 end after do @empty_array = nil end end [...]]]></description>
			<content:encoded><![CDATA[				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2008/03/04/from_unittest_to_rspec/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>10分ぐらい調べて試してみただけだけど。</p>
				<pre lang="ruby">
require 'rubygems'
require 'test/unit'
require 'spec'

class TestArray < Test::Unit::TestCase

  # test/unit
  def test_1
    assert_equal(0, Array.new.size)
  end

  # rspec
  describe Array, "when empty" do
    before do
      @empty_array = []
    end

    it "should be empty" do
      @empty_array.should be_empty
    end

    it "should size 0" do
      @empty_array.size.should == 0
    end

    after do
      @empty_array = nil
    end
  end
end
</pre>
				<pre lang="bash">
$ ruby test.rb
....

Finished in 0.007974 seconds

4 examples, 0 failures
</pre>
				<p>RSpecの方のテストはるびまの角谷さんの<a href="http://jp.rubyist.net/magazine/?0021-Rspec">記事</a>から拝借しました。</p>
				<p>spceをrequireして、クラスに書きこんでいけばよさそう。仕事だとtest/unitで書いてしまったテストも多いだろうから、test/unitからRSpecに移行するのにいいかもしれない。</p>
				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2008/03/04/from_unittest_to_rspec/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>
]]></content:encoded>
			<wfw:commentRss>http://ukstudio.jp/2008/03/04/from_unittest_to_rspec/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

