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.

Salesforce Developer Group ルーキー会 #08

勉強会資料

  • Login to see the comments

  • Be the first to like this

Salesforce Developer Group ルーキー会 #08

  1. 1. Salesforce Developer Group Rookies #08 2018/04/19(木)@株式会社ビズリーチ
  2. 2. 本日のメニュー 2 • 19:00~19:10 ルーキー会の簡単な説明 • 19:10~19:20 自己紹介タイム • 19:20~20:40 モブプログラミング • 20:40~20:50 成果発表 • 20:50~21:00 締め&集合写真タイム • 21:00~21:30 ご歓談タイム 注意事項 会場の様子は写真に撮って公開される可能性があります。予めご了承下さい。 (顔出しNGの方がいらっしゃいましたらサッと隠れるか運営までお知らせ下さ い)
  3. 3. 今日の進行役 3 讃岐 行(Sanuki Ikou) 株式会社テラスカイ Tw:@i_sanuki FB:isanuki なにやっている人?  Salesforce導入コンサルティング、開発  社内ツール開発、トレーニング  Salesforce Developer Group、Developerルーキー会の運営  ユーザグループ「新機能照らす会」のリーダー  TrailblazerCommunityにちらほら
  4. 4. SFDG Rookiesの紹介 これからSalesforceを学ぶデベロッパーのコミュニティ 4
  5. 5. 運営メンバー 5 株式会社テラスカイ 讃岐 行 @i_sanuki 株式会社フレクト 齊藤 俊 株式会社テラスカイ 須山 洋輔 @suyaman_jp 株式会社NSD 小林 亮理 @ryosuke921186 ServiceCloud の達人 Apexの神MVP テストの鬼
  6. 6. 今日の参加者割合 6
  7. 7. 7 3年未満 2年未満 1年未満 未経験 3年以上 未経験 半年未満 1年未満 2年未満 3年未満 SFでの 開発経験 プログラミングの経験 2 1 3 2 1 1 1 5 1 3年以上 4 2 1 半年未満 2 人数=30 1 1 1 1
  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メニューで実行 • クライアント型の開発ツール – EclipseやVSCode • 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/1p2KtM1xR3m9f5qFMBfT4V3yhDUWmeTyE お題のクラスファイル
  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. お題⑥ テストの効率化 「rookiesNo.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. DGルーキー会 次回予告 • 5月24日(木)19:00~ • 場所はテラスカイ新オフィス@日本橋 27
  28. 28. 各種イベント紹介 • 4月25日(水) 19:00- TrailheaDX 2018 Global Gatherings – https://www.meetup.com/ja-JP/Tokyo-Salesforce-Developer-Group/events/247044256/ • 5月15日(火) 19:00- Salesforce女子部 #17 – https://sfggjp.connpass.com/event/84736/ • 5月1日~6月29日 Trailhead活用選手権(メンバー募集4/20まで) – https://success.salesforce.com/_ui/core/chatter/groups/GroupProfilePage?g=0F9300000001sOH &fId=0D53A00003apT1d 28

×