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テストする方法を調べたのでメモします。
...
https://qiita.com/repeatedly/items/727b08599d87af7fa671
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/25 07:38