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

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

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

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

Q&A

解決済

4回答

481閲覧

rubyの基礎的なテストの書き方

umakichi

総合スコア44

Ruby

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

0グッド

1クリップ

投稿2022/03/30 22:00

rubyの基礎的なtestの書き方です。fizzbuzz問題をテストしようとしているのですが、記入方法がうまくいかず調べてもわかりません。ご教授いただけると助かります。

実装したい事、
fizzbuzzの15の時、"fizzbuzz"と表示されるということをテストしたい。

試していること
assert_equal 'fizzbuzz', i == 15 
という形でfizzbuzzの iが15の時、"fizzbuzz"と表示されるということをテスト

結果
Error:
FizzBuzz#test_fizz_buzz:
NameError: undefined local variable or method i' for #<FizzBuzz:0x00007fc22091f750> janken.rb:20:in test_fizz_buzz'
とネームエラーとなってしまう。

ruby

1for i in 1..30 2 3 if i%15==0 4 puts "fizzbuzz" 5 elsif i%5==0 6 puts "buzz" 7 elsif i%3==0 8 puts "fizz" 9 else 10 puts i 11 end 12end 13 14require 'minitest/autorun' 15 16class FizzBuzz < Minitest::Test 17 def test_fizz_buzz 18 assert_equal 'fizzbuzz', i == 15 19 end 20end

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

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

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

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

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

guest

回答4

0

fizzbuzz問題をテストしようとしているのですが

そもそも論として、「同じソースコード内でputsした結果」を取ることが困難なので、このコードのままではテスト自体が書きづらいです。

「自分で書くコードにテストを書く」といった場合、往々にしてテストしやすいコードを書くことも含まれています。

投稿2022/03/30 22:32

maisumakun

総合スコア145183

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

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

umakichi

2022/03/31 06:40

なるほど、確かにテストしやすいコードを書くと言うのは大事ですね。ありがとうございます。
guest

0

i を定義しないまま i == 15 と比較に使ってるからです。i = 15 なら i に 15を代入という定義になるので undefined local variable or method にはなりませんが。
にしても、そのテストの行自体が ??? なので、、、、、
その行の意味は
'fizzbuzz' (というString) と i == 15(という Boolean)が等しいことが期待される
てすので。

投稿2022/03/30 23:34

winterboum

総合スコア23329

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

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

umakichi

2022/03/31 06:37

ありがとうございます。そう言う事なのですね。わかりまして、無事解決しました。
guest

0

ベストアンサー

質問文のコードを活かしてかいてみました。
(テストしたいコードとテストコードはファイルを分けるのが普通ですが)

r.rb

ruby

1def fizzbuzz(i) 2 if i % 15 == 0 3 'fizzbuzz' 4 elsif i % 5 == 0 5 'buzz' 6 elsif i % 3 == 0 7 'fizz' 8 else 9 i 10 end 11end 12 13require 'minitest/autorun' 14 15class FizzBuzz < Minitest::Test 16 def test_fizz_buzz 17 assert_equal 1, fizzbuzz(1) 18 assert_equal 2, fizzbuzz(2) 19 assert_equal 'fizz', fizzbuzz(3) 20 assert_equal 4, fizzbuzz(4) 21 assert_equal 'buzz', fizzbuzz(5) 22 assert_equal 'fizz', fizzbuzz(6) 23 assert_equal 7, fizzbuzz(7) 24 assert_equal 8, fizzbuzz(8) 25 assert_equal 'fizz', fizzbuzz(9) 26 assert_equal 'buzz', fizzbuzz(10) 27 assert_equal 'fizzbuzz', fizzbuzz(15) 28 end 29end 30

実行例
イメージ説明

投稿2022/03/31 14:09

katoy

総合スコア22324

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

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

umakichi

2022/04/01 21:50

細かく、コードまで書いて頂き、誠にありがとうございます。非常にわかりやすいです。
guest

0

参考情報
https://github.com/JunichiIto/ruby-book-codes-v2/blob/main/ruby-book/test/fizz_buzz_test.rb

書籍 "プロを目指す人のためのRuby入門 改訂2版" も読むと良いです。
上のコードはこの書籍中のコードです。

投稿2022/03/31 04:01

katoy

総合スコア22324

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

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

umakichi

2022/03/31 06:39

ありがとうございます。書籍読んでみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問