Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Sfdgr 15 20190115

Salesforce Developer Group ルーキー会 第15回資料

  • Login to see the comments

Sfdgr 15 20190115

  1. 1. Salesforce Developer Group Rookies #15 2019/01/15(火)@株式会社フレクト
  2. 2. 本日のメニュー 2 • 19:00~19:10 ルーキー会の簡単な説明 • 19:10~19:20 自己紹介タイム • 19:20~19:35 Apexテストの基礎 • 19:35~20:40 モブプログラミング • 20:40~20:50 成果発表 • 20:50~21:00 締め&集合写真タイム • 21:00~21:30 ご歓談タイム 注意事項 会場の様子は写真に撮って公開される可能性があります。予めご了承下さい。 (顔出しNGの方がいらっしゃいましたらサッと隠れるか運営までお知らせ下さ い)
  3. 3. 今日の進行役 名前:小林 亮理(リョウスケ) 所属:株式会社フレクト :@ryosuke921186 SF歴:7年くらい 最近:そろそろ次の資格とる! 趣味:運動(ソフトテニス、ゴルフ、ジムでトレーニング)、寝る 3
  4. 4. SFDG Rookiesの紹介 これからSalesforceを学ぶデベロッパーのコミュニティ 4
  5. 5. 運営メンバー 5 株式会社テラスカイ 讃岐 行 @i_sanuki 株式会社フレクト 齋藤 俊 株式会社テラスカイ 須山 洋輔 @suyaman_jp 株式会社フレクト 小林 亮理 @ryosuke921186 SCに 愛されたい男 Apexの神MVP テストの鬼 株式会社フレクト 川勝 基史 株式会社テラスカイ 城石 泰宏 @SHIROISHI_TS Trailblazer 見習いLv10 Cloudの 貴公子
  6. 6. 今日の参加者割合 6 人数 開発者(コードを書いてシステムを作る) システム管理者(コードを書かずにシステムを作る) その他
  7. 7. 7 SFでの 開発経験 プログラミングの経験 未経験 半年未満 1年未満 2年未満 3年以上 未経験 0 0 1 0 0 半年未満 2 0 0 0 0 1年未満 0 0 1 1 0 2年未満 0 0 0 1 0 3年以上 3 1 1 1 7
  8. 8. 8 自己紹介タイム ■Salesforceでのプログラミング経験年数 ■普段どんなことやってる? ■今日の意気込み
  9. 9. 今日のお題である 「テスト」の基本
  10. 10. 概要 Apexは通常SandboxやDE組織で行われ、完成したら本番環境にリ リースされます。ApexのフレームワークではApexクラス/トリガーが 本番リリース時にテストされ、エラーが1つもなく、かつコードカバ レッジがしきい値を超える場合のみリリースが成功します。 10 Apexクラス・ トリガー Apexテスト Sandbox/DE 本番組織 ③リリース ⑤リリース成功 ①開発 ②テスト ⑥利用 Apexクラス・ トリガー Apexテスト ④テスト Apexクラス・ トリガー Apexテスト
  11. 11. 何のためのテスト? ① 開発したプログラムが正しく動くことの確認 ② コード修正した時のデグレの影響確認 ③ 自動テストによる効率化 11 Force.comはプラットフォームとして「テストを書かないとリリースで きない」ですが、開発者がテストを書く理由はリリースのためだけでは ありません。 組織全体で75%のコードカバレッジがあり、リリース可能な状態となる
  12. 12. Apexテストクラスの例 テストは専用のApexクラスを作成する必要があります。 12 // Accountを取り扱うレコードアクセス用クラス public class AccountDao { // 指定したIDのAccountレコードを取得・返却するメソッド public static Account getAccountById(Id accountId) { return [ SELECT Id, Name FROM Account WHERE Id =: accountId ]; } } @isTest Private class AccountDaoTest { @isTest static void getAccountById_ok() { Account acc = new Account(); acc.Name = ‘test’; Insert acc; Test.startTest(); Account selectedAccount = AccountDao.getAccountById(acc.Id); Test.stopTest(); System.assertEquals(True, selectedAccount != null); System.assertEquals(‘test’, selectedAccount.Name); } } プロダクションコード テストコード 検証用のテストレコードを作成 テストしたいクラスを 呼び出し 想定通りに動作 しているか確認
  13. 13. テストコードに関するお約束や心得について 13 大体の場合、テストするクラス名の前か後ろに「Test」という名前をつ けて作成。※プロジェクトや開発者によって異なる テストクラス名 アプリケーションのテストに使用するコードのみを含むクラス、および メソッドを定義する場合に使用する @isTest アノテーション 基本的にテストクラス自体が他クラスから参照されることはないため ※テスト用のユーティリティクラスなどの場合は、public にする アクセス修飾子は private テストメソッドのルールとして static メソッドにすることstatic メソッド 明示的にここからここまでがテスト実行部分と表すために必ず使う ※startTestとstopTestは、その範囲外で行ったガバナ制限を緩和する startTest / stopTest 引数による処理分岐など、テストは1パターンだけでは終わらない ※前提条件によってもパターンはわかれる 複数のテスト
  14. 14. テストの実行方法 リリース時を除いて、テストを実行する代表的なものについて 14 • Apex クラスメニュー – 設定メニューのApexクラス画面上の「すべてのテストを実行」 • Apex テスト実行メニュー – 設定メニューのApexテスト実行からテストクラスを選択 • 開発者コンソール – 開発者コンソールのTestメニューで実行 • クライアント型の開発ツール – VSCode、(Eclipse、Sublime Text)など • Force.com migration tool(中級者向け) – メタデータAPIを使ったテストの実行
  15. 15. テストフレームワークの仕様 Force.com のテストフレームワークの仕様について 15 本番組織へリリースするには以下の条件をクリアする必要がある • エラーがないこと • 組織全体のApexコードに対して75%以上のカバレッジがあること • トリガーは1%以上のカバレッジがあること リリース テスト内におけるオブジェクトへの変更は、たとえDMLを実行してもコミット されません。 コミット テスト内では組織に登録済みのトランザクション系オブジェクトのレコードに はアクセスできません。また、テストクラスは、どの組織に移行しても動くよ うに作るというのが大切(ただし、例外もあり@isTest(SeeAllData=true)) レコード
  16. 16. おさらい • Apexにはテストフレームワークがある • プロダクションコードに対して、テストコードを記述する • テストメソッド内でプロダクションコードを実行して結果を検証する • 本番組織へリリースするには、テストのリリース条件がある • テスト内での変更は組織にコミットしない • テスト内では組織に登録済みのレコードにアクセスできない 16
  17. 17. Let's モブプログラミング  ドライバーを一人決め、それ以外はナビゲータとしてサポート  ドライバーが詰まっても、周りは優しくサポート!  疑問点があったら遠慮なく周りの人やメンターに聞いてみよう!  適度なところでドライバーを交代しよう  ~20:40まで(チーム内での振り返り含めて) 17
  18. 18. 今日のお題:テストメソッド 18 お題① テストの実行方法を学ぶ お題② Assertを使って戻り値の検証 お題③ SOQLを含むメソッドのテスト お題④ 引数ありのメソッドやifの分岐 お題⑤ DML(レコード保存)のテスト お題⑥ テストの効率化(ファクトリークラス) https://drive.google.com/drive/folders/17yi6ubE9SysIKQIppKnXpvOoHRlCJloh?usp=sharing お題のクラスファイル
  19. 19. お題① テストの実行方法を学ぶ 「rookiesNo1.cls」に対してのテストメソッドを作成してください。 ※テストクラスを作成し、テストクラスから下記メソッドを呼ぶ 値が想定通りかの検証(assert)は①では不要です。 19
  20. 20. お題② Assertを使って戻り値の検証 「rookiesNo1.cls」に対しての戻り値も検証するテストメソッドを作 成してください。 • お題①とは別のメソッドを作成すること • assertEqualsを利用する • 意図的にassertExceptionを発生させて、try~caatchで拾えないことも確 認しよう 20
  21. 21. お題③ SOQLを含むメソッドのテスト 「rookiesNo3.cls」の getAccounts()をカバーするテス トメソッドを作成してください。 • テスト前にAccountを1件以上作成 する • 戻り値を受けとり検証すること 21
  22. 22. お題④ 引数ありのメソッドやifの分岐 「rookiesNo3.cls」の getAccounts()をカバーするテスト メソッドを作成してください。 • テスト前にAccountを2件以上作成 する • getAccountById()にあるif文の分岐 もそれぞれカバーしよう 22
  23. 23. お題⑤ DMLのテスト 「rookiesNo5.cls」の取引先オブジェクトのレコードを作成する createAccount()をカバーするテストを作成してください。 • レコードが正しく作成されたか検証しよう • レコードが作成されない(Nameがnull)場合のテストもしよう 23
  24. 24. お題⑥ テストの効率化 「rookiesNo6.cls」のgetSufficientAccounts()をカバーするテストを 作成してください。 • レコード500件作成はベタで書かずTestFactoryクラスに件数を引 数で受けとるメソッドを作成して、まとめて作成できるように 24
  25. 25. 成果発表 チームごとにお願いします! ■代表者1名から※ステッカープレゼント どんな感じに進めたか(難しかったとか?) どこまで、できたか などなど ■メンターから フィードバック 25
  26. 26. Trailblazer Community Salesforceのユーザやアドミンや開発者が集まるコミュニティ 26 • https://success.salesforce.com/_ui/ core/chatter/groups/GroupProfilePa ge?g=0F93A000000HTtr 【開発者向け】 • Salesforce Developer Group ルーキー会 • Tokyo Salesforce Developer Group • Salesforce女子部 など 今日の勉強会レポートを書いてくれる方 大募集!
  27. 27. お知らせ https://connpass.com/event/109851/ 日本のSalesforce コミュニティによる合同イベン ト 2019年1月26日(土) 13:00~ ウィングアーク1st 本社(六本木)
  28. 28. DGルーキー会 次回予告 • 2月28日(木)19:00~ • 場所はアクセンチュア様@溜池山王 28

×