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

ちゃんと実装してちゃんとテストしよう / PyCon mini Hiroshima 2019

7pairs
October 12, 2019

ちゃんと実装してちゃんとテストしよう / PyCon mini Hiroshima 2019

7pairs

October 12, 2019
Tweet

More Decks by 7pairs

Other Decks in Technology

Transcript

  1. ࣗݾ঺հ • ௕୩৔ ५໵ (͸ͤ͹ ͡ΎΜ΍) • ֤छSNSͰ͸ 7pairs Ͱ׆ಈத

    • ޷͖ͳେࡕۅӂ͸தଜ߶໵ / ޷͖ͳ෋࢜େֶ͸֎࡚मଡ • ͓࢓ࣄͰ͸Android (Java / Kotlin) / iOS (Objective-C / Swift) ͕த৺ • ͋·ΓҰൠతͱ͸ݴ͑ͳ͍Pythonͷ࢖͍ํΛ໛ࡧ͢Δͷ͕େ޷͖ • PyCon JPͰAltJS (2018) / Android (2019) ʹ͍ͭͯൃද • https://speakerdeck.com/7pairs
  2. ίϯϙʔωϯτςετ (Component testing) • ݸʑͷιϑτ΢ΣΞίϯϙʔωϯτͷςετɻ 
 (ISTQB༻ޠू) • Ϣχοτςετ /

    ୯ମςετͱ 
 ݺ͹ΕΔ͜ͱ͕ଟ͍ • ίʔυͷ։ൃ୲౰ऀ͕ߦ͏͜ͱ͕Ұൠత
  3. ౷߹ςετ (Integration testing) • ౷߹ͨ͠ίϯϙʔωϯτ΍γεςϜͷ 
 ΠϯλʔϑΣʔε΍૬ޓ࡞༻ͷܽؕΛ 
 ఠग़͢ΔͨΊͷςετɻ (ISTQB༻ޠू)

    • ݸʑͷίϯϙʔωϯτͷػೳͰ͸ͳ͘ 
 ίϯϙʔωϯτؒͷίϛϡχέʔγϣϯʹ 
 য఺Λ౰ͯΔඞཁ͕͋Δ
  4. վળલ import datetime # 結果が実行タイミングに依存する def is_saturday(): today = datetime.date.today()

    return today.weekday() == 5 if is_saturday(): print('Hello, PyCon mini Hiroshima!')
  5. վળલ class Weather: def __init__(self): self._api = WeatherApi() # テストを実施するたびに

    # APIへのアクセスが発生する def get_celsius(self): return self._api.get_celsius()
  6. վળޙ class Weather: def __init__(self, api): self._api = api #

    テストを実施するたびに # 引数で渡されたオブジェクトへの # アクセスが発生する def get_celsius(self): return self._api.get_celsius()
  7. ελϒ / ϞοΫ͕ར༻Մೳʹ import unittest class DummyWeatherApi(WeatherApi): def get_celsius(self): return

    33.4 class SampleTest(unittest.TestCase): def test_sample(self): weather = Weather(DummyWeatherApi()) # get_celsiusに対するテストを実施
  8. 6. ςετ͸ঢ়گ࣍ୈ • ιϑτ΢ΣΞͷੑ࣭ʹΑͬͯ 
 ॏ఺తʹςετ͢Δ಺༰͕มΘͬͯ͘Δ • μ΢ϯͯ͠͸ࠔΔγεςϜͳͷͰ 
 ෛՙςετΛॏ఺తʹߦ͏

    • ͓ۚΛѻ͏γεςϜͳͷͰ 
 ηΩϡϦςΟपΓΛॏ఺తʹςετ͢Δ • ͦͷػೳ͕ଘࡏ͠ͳ͍͜ͱ͕Ϗδωε্ͷϦεΫͳͷͰ 
 ςετͷ࣌ؒΛ୹Ίʹͯ͠ϦϦʔεͯ͠͠·͏