0
0

テストコードのコツと注意点

Posted at

はじめに

新卒入社、おめでとうございます
テストコードの初歩的なTipsについてまとめてみました

Tips

※ コード例はRuby(RSpec)を使用しています

以下のようなBooleanを返す処理に対するテストコードを考えます
is_xxx?では、判定処理check_a?check_b?両方がtrueの場合にtrueが返されます

ruby
class Test
  def is_xxx?
    check_a? && check_b?
  end
end

この場合、テストコードはこんな感じになると思います

ruby
describe Test do
  describe '#is_xxx?' do
    subject { instance.is_xxx? }
    
    let(:instance) { described_class.new }
    let(:a) { true }
    let(:b) { true }

    before do
      allow(instance).to receive(:check_a?).and_return(a)
      allow(instance).to receive(:check_b?).and_return(b)
    end

    context 'check_a? が false の場合' do
      let(:a) { false }
      it { is_expected.to be(false) }
    end

    context 'check_b? が false の場合' do
      let(:b) { false }
      it { is_expected.to be(false) }
    end

    context 'それ以外の場合' do
      it { is_expected.to be(true) }
    end
  end
end

ポイント

check_a?の観点でcontextを記載する場合、
afalseに設定した場合、期待値はfalseになると思います

この時、check_b?の戻り値もfalseに設定してしまうと、
テストコードが不備や設定の誤りでcheck_a?の戻り値がtrueになってしまっていた場合でも、
check_b?の戻り値falseにより期待値falseが満たされてしまいます

これでは正しくテストケースを実施できていないことになります

contextに記載する要素だけでなく、
それ以外の要素がテスト結果に影響を与えないよう注意しましょう。

さいごに

4月ということで、初歩的な内容ではありますがまとめてみました
新人エンジニアの方にとって役立つことを願っています

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0