抹殺世界 paiza D問題「荒れ果てた警察署」のテストコード


paizaエンジニア抹殺世界

問題文要約。

0から9の数字を3つ入力すると開く扉があるとする
鍵の番号は左から 2 つまで判明しており、3つ目は以下の法則で決まる

・判明している二つを足して10で割ったときの余り

2つ目までの数字を与えるので3つ目を求める

テストコードの大枠を作る

spec/paiza_lebelD_spec.rb
require 'spec_helper'

RSpec.describe Lebel_D do

end

class名だけ作る

lib/lpaiza_lebelD.rb
class Lebel_D

end
$ bundle exec rspec
0 examples, 0 failures

 テストコード

判明している二つの数字を引数にする(num_1,num_2)
期待する結果は2なのでイコールの右には2を置く

spec/paiza_lebelD_spec.rb
RSpec.describe Lebel_D do
  it '荒れ果てた警察署' do
    result = Lebel_D.new.key(num_1: 4, num_2: 8)
    expect(result).to eq 2
  end
end
$ bundle exec rspec
undefined method `key' for #<Lebel_D:0x00007fc72591ae08>

メソッドを作る

lib/lpaiza_lebelD.rb
class Lebel_D
    def key(num_1:, num_2:)
    end
end

keyメソッドに二つの引数を渡す

$ bundle exec rspec
  1) Lebel_D 荒れ果てた警察署
     Failure/Error: expect(result).to eq 2

       expected: 2
            got: nil

エラーメッセージが変わりました

期待していた「2」ではなく「nil」が帰ってきた

メソッドの中身を書く

lib/lpaiza_lebelD.rb
class Lebel_D
    def key(num_1:, num_2:)
      add = num_1 + num_2   //与えられた数字すべてを足して
      remainder = add % 10  //10で割ったときの余りを戻り値として返す
    end
end
$ bundle exec rspec
1 example, 0 failures

オールグリーン

リファクタリング

意味なし最終コード

lib/lpaiza_lebelD.rb
class Lebel_D

  def initialize(num_1:, num_2:)
    @add = num_1 + num_2
  end

  def key
    remainder = @add % 10
  end
end
spec/paiza_lebelD_spec.rb
require 'spec_helper'

RSpec.describe Lebel_D do
  let(:number) { Lebel_D.new(num_1: 4, num_2: 8) }
  it '荒れ果てた警察署' do
    expect(number.key).to eq 2
  end
end

rspec入門はこちらから
https://qiita.com/jnchito/items/42193d066bd61c740612

見てくれてありがとう!