Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A question about private method testing

A question about private method testing

2019/3/3の「よちよち.rb 第143回 〜 jnchito さんと!Ruby・Rails での『困った』を解消しよう会〜」で質問するにあたって前提やコード例など出しながら質問するのに使ったスライドです。

Takahiro Uchiyama

March 03, 2019
Tweet

More Decks by Takahiro Uchiyama

Other Decks in Programming

Transcript

  1. ͨͱ͑͹͜Μͳίʔυ namespace :hoge do desc 'Hogeに関するデータを送る' task send: :environment do

    |task| Tasks::Hoge::Sender.execute end end lib/tasks/hoge_send.rake module Tasks module Hoge class Sender def self.execute # まずはデータを集めてくる # そのあとにいい感じの加工をする # S3に置きにいく end end end end lib/tasks/hoge/sender.rb
  2. ͍͍ͩͨ ͜͏͍͏ίʔυ͸
 ॻ͍ͯΔ͏ͪʹ
 privateϝιου͕
 ૿͖͑ͯͯ... module Tasks module Hoge class

    Sender def self.execute data = aggretage_data processed_data = process_data(data) send_s3(processed_data) end private def aggregate_data # データを集めてくる処理 end def process_data(data) # データを加工する処理 end def send_s3(data) # s3に置く処理 end end end end lib/tasks/hoge/sender.rb
  3. classʹ੾Γग़͢͜ͱ΋
 ΋ͪΖΜ͋ΔͷͰ͕͢... lib/tasks/hoge/sender.rb module Tasks module Hoge class Sender def

    self.execute data = Hoge::DataAggregator.aggregate processed_data = Hoge::DataProcessor.new(data).process Hoge::S3Sender.send(processed_data) end end end end
  4. ҙ֎ͱେͨ͠ॲཧͰ΋ͳ͍ͷͰ ಉ͡classͷํ͕ݟ௨͕͠ྑ͘ࢥ͑Δ͜ͱ΋͋Δ lib/tasks/hoge/sender.rb module Tasks module Hoge class Sender def

    self.execute data = Hoge::DataAggregator.aggregate # データ加工といってもこの程度ならclass切り出さなくてもいいのでは? processed_data = data .group_by(&:first)
 .sort .map { |key, values| [values[0], values[1]] } Hoge::S3Sender.send(processed_data) end end end end lib/tasks/hoge/sender.rb
  5. lib/tasks/hoge/sender.rb Ͱ΋Rubocopʹ͸ౖΒΕΔ(MethodLength΍AbcSize)ͷͰ
 ΍͸Γprivateϝιουʹ module Tasks module Hoge class Sender def

    self.execute data = Hoge::DataAggregator.aggregate processed_data = process_data(data) Hoge::S3Sender.send(processed_data) end private def process_data(data) data .group_by(&:first)
 .sort .map { |key, values| [values[0], values[1]] } end end end end lib/tasks/hoge/sender.rb
  6. spec/tasks/hoge/sender_spec.rb ݁ՌprivateϝιουΛ
 ςετ͓͖͍ͯͨ͠ؾ࣋ͪʹͳΔ... require 'rails_helper' describe Tasks::Hoge::Sender do describe '#execute'

    do subject { described_class.execute } it '加工されたデータがS3に置かれること' do is_expected.to (期待する結果) end end describe '#process_data' do subject { described_class.send(:process_data, data) } let(:data) { (ダミーデータ) } it 'データが正しく加工されること' do is_expected.to (期待する結果) end end end