実装作業ログ
週末は何やかやで作業できず。
ようやく作業再開な次第で。
試験はデキてたんで、ココに書いてある通りの実装をした後に試験。試験マターな問題としていくつかエラーが出たので修正点も含め、ロギングを。
デフォルト値の確認での勘違い
Configuration クラスで setting 使ってデフォ値を設定している箇所は文字列ではなく、クラスに合わせたリテラル値を指定するよう修正している。以下のような感じ。
class Configuration < ConfigManager setting :blog_name, :string, "Name of the blog", "MyBlog" setting :default_allow_pings, :bool, "Allow trackbacks by default", false setting :default_allow_comments, :bool, "Allow comments by default", false setting :sp_global, :bool, "Use SpamProtection functionality", false setting :sp_article_auto_close, :integer, "Auto-close ability to comment/track back articles after X days", 300 setting :sp_url_limit, :integer, "Limit for URLs in comments and trackbacks", 10 setting :text_filter, :string, "Default HTML transformation style", "textile" end def config $config ||= Configuration.new end
で、試験でのデフォ値である事を確認する試験で以下のようにしていた (一部のみ抜粋)
def normalize_value(line) case (Configuration.fields[line.name.to_s].ruby_type rescue :string) when :bool ( line.value.to_i != 0 ) ? true : false when :integer line.value.to_i else line.value end end def assert_default Configuration.fields.each do |k, v| assert_equal @cm[k], normalize_value(v) end end def test_initialize assert_default end
assert_default の each なループん中の v って struct ConfigManager::Item のオブジェクトなんだよねぇ。何考えてるんだ、とゆー事で以下のように修正。
def assert_default Configuration.fields.each do |k, v| assert_equal @cm[k], v.value end end
ナチュラル、では済まされないボケっぷりが凄い。
ActiveSupport を勘違いしている件
どうも Hash のキーが文字列でも Symbol でも OK なソレを勘違いしている。つっても何をどう勘違いしているか、をきちんと説明できないアタリが微妙なんですが。
以前のエントリでも実装例を紹介した記憶があるんですが、以下のような試験を書いた。
def test_default array = [:blog_name, :default_allow_pings, :default_allow_comments, :sp_global, :sp_article_auto_close, :sp_url_limit, :text_filter] array.each do |a| assert_not_nil Configuration.fields[a] end assert_equal array.size, Configuration.fields.size end
script/console で確認すれば良いのにしていない模様。でもどっかで Symbol で参照していたようにも思うんだけれど ... (Configuration.fields[:blog_name] みたいな感じ)
not_nil でなければならないハズなんですが、nil です、と叱られる。
もしや、と思い以下のように修正すると通りました。
def test_default array = [:blog_name, :default_allow_pings, :default_allow_comments, :sp_global, :sp_article_auto_close, :sp_url_limit, :text_filter] array.each do |a| assert_not_nil Configuration.fields[a.to_s] end assert_equal array.size, Configuration.fields.size end
このあたりは少々理解不足の感あり。きちんと整理しとく必要あり。
UT は通ったので次は機能試験着手か。基本的には system_id の盛り込みだけ、のはず。
追記
んじゃ最初から文字列にしときゃ良かったぢゃんか (array)、とゆーツッコミはご勘弁願います orz
追記 2
typo も parabola も実装と試験は完了。機能試験が双方で微妙に違うのもナニ。(何
本番環境にぶち込んで動作の確認取ったら今日の仕事は終了しちゃれ(を