研修ということでRubyでの課題を進めていました。
基本的にはpythonでなら知ってる関数と同じことができるメソッドを探して進めていたんですが...
- test/unitを使ってテストコードを書く
じゃんけんの勝ち負けを判定するクラス、メソッドを書いて、それをテストするコードを書く課題。
テストコードはpythonでも書いたことがなく、クラスも自分で書くのは数回しかやってないから何から始めりゃいいのか。
とりあえずググって見様見真似で書いてみた。
janken_class.rb
classJankendefhantei(p_hand,c_hand)ifp_hand==c_handreturn"あいこ"elsif(p_hand=="グー"&&c_hand=="チョキ")\||(p_hand=="チョキ"&&c_hand=="パー")\||(p_hand=="パー"&&c_hand=="グー")return"勝ち"elsereturn"負け"endendend
このクラスを使って標準入力からg,c,p(グー、チョキ、パー)を入力してコンピュータ側でのランダムな手との対戦結果を表示するコード。
janken.rb
require'./janken_class'player=gets.chompcpu=Random.rand(0...3)gcp={"g"=>"グー","c"=>"チョキ","p"=>"パー"}hands=gcp.valuesp_hand=gcp[player]c_hand=hands[cpu]janken=Janken.newresult=janken.hantei(p_hand,c_hand)puts"あなたは#{p_hand}、私は#{c_hand}、#{result}です。"
そして問題のテストコード。
janken_test.rb
require'test/unit'require'./janken_class'classTC_janken<Test::Unit::TestCasedefsetup@obj=Janken.newenddeftest_draw_gcheck=@obj.hantei("グー","グー")assert_equal("あいこ",check)enddeftest_draw_ccheck=@obj.hantei("チョキ","チョキ")assert_equal("あいこ",check)enddeftest_draw_pcheck=@obj.hantei("パー","パー")assert_equal("あいこ",check)enddeftest_win_gcheck=@obj.hantei("グー","チョキ")assert_equal("勝ち",check)enddeftest_win_ccheck=@obj.hantei("チョキ","パー")assert_equal("勝ち",check)enddeftest_win_pcheck=@obj.hantei("パー","グー")assert_equal("勝ち",check)enddeftest_lose_gcheck=@obj.hantei("グー","パー")assert_equal("負け",check)enddeftest_lose_ccheck=@obj.hantei("チョキ","グー")assert_equal("負け",check)enddeftest_lose_pcheck=@obj.hantei("パー","チョキ")assert_equal("負け",check)endend
1つずつメソッドを作らなくても1つのメソッド内で複数の場合をテストした方がよいとのご指摘により修正。
janken_test_modify.rb
require'test/unit'require'./janken_class'classTC_janken<Test::Unit::TestCasedefsetup@obj=Janken.newenddeftest_jankencheck=@obj.hantei("グー","グー")assert_equal("あいこ",check)check=@obj.hantei("チョキ","チョキ")assert_equal("あいこ",check)check=@obj.hantei("パー","パー")assert_equal("あいこ",check)check=@obj.hantei("グー","パー")assert_equal("負け",check)check=@obj.hantei("パー","チョキ")assert_equal("負け",check)check=@obj.hantei("チョキ","グー")assert_equal("負け",check)check=@obj.hantei("グー","チョキ")assert_equal("勝ち",check)check=@obj.hantei("チョキ","パー")assert_equal("勝ち",check)check=@obj.hantei("パー","グー")assert_equal("勝ち",check)endend
test\unitについてはもっと公式リファレンス読み込んで理解しておきたい。
- Vimがやっぱり使いづらい
色々とコード書いてて、やっぱり使いづらい。特に普通のIDEみたいに手軽にコピペができないのがしんどい。クリップボードが使えない設定になってたからvim_gnomeインストールして設定もいじってみたけどうまくいかない。WSLだからかな...
- Ubuntu上からWindowsのファイルを操作
これには色々な方法があるみたいだけど、僕はUbuntuのホームディレクトリにwindowsのフォルダのシンボリックリンクを作ることにしました。
ln -s /mnt/c/Users/name ~/name
これ使えばもしかしたらwindows側のIDEからスクリプト書いてUbuntuで実行できるかも?