はじめに
新卒入社、おめでとうございます
テストコードの初歩的な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
を記載する場合、
a
をfalseに設定した場合、期待値はfalseになると思います
この時、check_b?
の戻り値もfalseに設定してしまうと、
テストコードが不備や設定の誤りでcheck_a?
の戻り値がtrueになってしまっていた場合でも、
check_b?
の戻り値falseにより期待値falseが満たされてしまいます
これでは正しくテストケースを実施できていないことになります
context
に記載する要素だけでなく、
それ以外の要素がテスト結果に影響を与えないよう注意しましょう。
さいごに
4月ということで、初歩的な内容ではありますがまとめてみました
新人エンジニアの方にとって役立つことを願っています