質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

1061閲覧

ruby test unitでテストコードを書く

simp

総合スコア18

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/11/25 01:01

先日、じゃんけんプログラムを作りました。

そこで、じゃんけんの勝ち負け判定をテストしたいと考えているのですが、test,unitの使い方が

いまいちわかりません。勝ち負け機能をクラス化したら、どうテストしたらいいのでしょうか?

puts "最初はグーじゃんけん・・・・" def janken puts "[g]グー\n[c]チョキ\n[p]パー" player_hand = gets.chomp jankens = ["g","c","p"] program_hand = jankens[rand(3)] puts "あなたの手:#{player_hand},相手の手:#{program_hand}" if player_hand == program_hand puts "引き分けです" elsif (player_hand == "g" && program_hand == "c")||(player_hand == "c" && program_hand == "p")||(player_hand == "p" && program_hand == "g") puts "あなたの勝ちです" else puts "あなたの負けです" end end puts janken

どなたかわかる方いたら教えてください!!
宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

https://teratail.com/questions/160122
の katoy の回答にかいたコードを class 化し、hantei メソッドのテストを書いてみました。

janken.rb

ruby

1# ジャンケンゲーム 2class Janken 3 HANDS = { 'g' => 'グー', 'c' => 'チョキ', 'p' => 'パー' }.freeze 4 HANTEI = { 5 'gg' => :draw, 'gc' => :win, 'gp' => :lose, 6 'cg' => :lose, 'cc' => :draw, 'cp' => :win, 7 'pg' => :win, 'pc' => :lose, 'pp' => :draw 8 }.freeze 9 10 MESSAGES = { 11 win: 'あなたの勝ちです', 12 lose: 'あなたの負けです', 13 draw: '引き分けです', 14 nil => '無効です' 15 }.freeze 16 17 def get_player_hand 18 puts '最初はグーじゃんけん・・・・' 19 puts "[g]グー\n[c]チョキ\n[p]パー" 20 gets.chomp 21 end 22 23 def get_program_hand 24 HANDS.keys[rand(3)] 25 end 26 27 def hantei(hand0, hand1) 28 HANTEI["#{hand0}#{hand1}"] 29 end 30 31 def show_result(player_hand, program_hand) 32 puts "あなたの手:#{HANDS[player_hand]}, 相手の手:#{HANDS[program_hand]}" 33 puts MESSAGES[hantei(player_hand, program_hand)] 34 end 35 36 def play 37 player_hand = get_player_hand 38 program_hand = get_program_hand 39 show_result(player_hand, program_hand) 40 end 41end 42 43if $PROGRAM_NAME == __FILE__ 44 game = Janken.new 45 game.play 46end

janken_test.rb

ruby

1require 'test-unit' 2 3require './janken.rb' 4 5class JankenTest < Test::Unit::TestCase 6 def setup 7 @janken = Janken.new 8 end 9 10 data( 11 'test_gg' => [:g, :g, :draw], 12 'test_cc' => [:c, :c, :draw], 13 'test_pp' => [:p, :p, :draw], 14 15 'test_gc' => [:g, :c, :win], 16 'test_cp' => [:c, :p, :win], 17 'test_pg' => [:p, :g, :win], 18 19 'test_gp' => [:g, :p, :lose], 20 'test_cg' => [:c, :g, :lose], 21 'test_pc' => [:p, :c, :lose] 22 ) 23 def test_hantei(data) 24 hand0, hand1, result = data 25 assert_equal result, @janken.hantei(hand0, hand1) 26 end 27 28 def test_hanei_invalid_hand 29 assert_equal nil, @janken.hantei(:x, :p) 30 assert_equal nil, @janken.hantei(:p, :x) 31 assert_equal nil, @janken.hantei(:x, :x) 32 end 33end

参考情報

  • Unitテストとは?から学ぶ、RubyでUnitテストをする一連の手順

http://www.meguroman.com/how-to-unit-test-on-ruby/

...
Rubyで書いたジャンケンのコードを`Unitテストする方法を調べたのでメモします。
...

  • Test::Unitでテストを書く

https://qiita.com/repeatedly/items/727b08599d87af7fa671

投稿2018/11/25 07:18

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

simp

2018/11/25 07:38

丁寧に指導いただきありがとうございます!!
guest

0

自己解決

require 'test/unit' class Sample puts "[g]グー\n[c]チョキ\n[p]パー" player_hand = gets.chomp jankens = ["g","c","p"] program_hand = jankens[rand(3)] def hantei(player_hand,program_hand) puts "あなたの手:#{player_hand},相手の手:#{program_hand}" if player_hand == program_hand puts "引き分けです" hikiwake = "引き分けです" elsif (player_hand == "g" && program_hand == "c")||(player_hand == "c" && program_hand == "p")||(player_hand == "p" && program_hand == "g") puts "あなたの勝ちです" win = "あなたの勝ちです" else puts "あなたの負けです" lose = "あなたの負けです" end end end #puts Sample.janken class TestSample < Test::Unit::TestCase def setup @janken = Sample.new end def test_janken1 test = @janken.hantei("g","c") assert_equal 'あなたの勝ちです', test end def test_janken2 test = @janken.hantei("c","p") assert_equal 'あなたの勝ちです', test end def test_janken3 test = @janken.hantei("p","g") assert_equal 'あなたの勝ちです',test end def test_janken4 test = @janken.hantei("g","p") assert_equal 'あなたの負けです',test end def test_janken5 test = @janken.hantei("c","g") assert_equal 'あなたの負けです',test end def test_janken6 test = @janken.hantei("p","c") assert_equal 'あなたの負けです',test end def test_janken7 test = @janken.hantei("g","g") assert_equal '引き分けです',test end def test_janken8 test = @janken.hantei("c","c") assert_equal '引き分けです',test end def test_janken9 test = @janken.hantei("p","p") assert_equal '引き分けです',test end end

投稿2018/11/25 03:00

simp

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問