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

More Related Content

What's hot

Sfdgr 14 20181220_v2.1
Sfdgr 14 20181220_v2.1Sfdgr 14 20181220_v2.1
Sfdgr 14 20181220_v2.1ssusere4be3c
 
20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCE20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCESFDG ROOKIES
 
Terakoyaforce 200125 ver2
Terakoyaforce 200125 ver2Terakoyaforce 200125 ver2
Terakoyaforce 200125 ver2R Onigiri
 
『企業とカイワする』というエンジニアの選択肢 〜自社サービス「カイワジョブ」立ち上げ舞台裏〜 #guildconf
『企業とカイワする』というエンジニアの選択肢 〜自社サービス「カイワジョブ」立ち上げ舞台裏〜 #guildconf『企業とカイワする』というエンジニアの選択肢 〜自社サービス「カイワジョブ」立ち上げ舞台裏〜 #guildconf
『企業とカイワする』というエンジニアの選択肢 〜自社サービス「カイワジョブ」立ち上げ舞台裏〜 #guildconfGuildWorks
 

What's hot (6)

SFDGR 06 20180219
SFDGR 06 20180219SFDGR 06 20180219
SFDGR 06 20180219
 
Sfdgr 14 20181220_v2.1
Sfdgr 14 20181220_v2.1Sfdgr 14 20181220_v2.1
Sfdgr 14 20181220_v2.1
 
SFDGR#04
SFDGR#04SFDGR#04
SFDGR#04
 
20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCE20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCE
 
Terakoyaforce 200125 ver2
Terakoyaforce 200125 ver2Terakoyaforce 200125 ver2
Terakoyaforce 200125 ver2
 
『企業とカイワする』というエンジニアの選択肢 〜自社サービス「カイワジョブ」立ち上げ舞台裏〜 #guildconf
『企業とカイワする』というエンジニアの選択肢 〜自社サービス「カイワジョブ」立ち上げ舞台裏〜 #guildconf『企業とカイワする』というエンジニアの選択肢 〜自社サービス「カイワジョブ」立ち上げ舞台裏〜 #guildconf
『企業とカイワする』というエンジニアの選択肢 〜自社サービス「カイワジョブ」立ち上げ舞台裏〜 #guildconf
 

More from SFDG ROOKIES

20190731ルーキー会 × TERAKOYAFORCE
20190731ルーキー会 × TERAKOYAFORCE20190731ルーキー会 × TERAKOYAFORCE
20190731ルーキー会 × TERAKOYAFORCESFDG ROOKIES
 
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向SFDG ROOKIES
 
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウSwtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウSFDG ROOKIES
 
Swtt2018 sfdgr1 Developer Group ルーキー会が教える!これから始めるSalesforce開発
Swtt2018 sfdgr1 Developer Group ルーキー会が教える!これから始めるSalesforce開発Swtt2018 sfdgr1 Developer Group ルーキー会が教える!これから始めるSalesforce開発
Swtt2018 sfdgr1 Developer Group ルーキー会が教える!これから始めるSalesforce開発SFDG ROOKIES
 
Sfdgr 11 20180725_salesforce_summer
Sfdgr 11 20180725_salesforce_summerSfdgr 11 20180725_salesforce_summer
Sfdgr 11 20180725_salesforce_summerSFDG ROOKIES
 
幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜
幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜
幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜SFDG ROOKIES
 

More from SFDG ROOKIES (6)

20190731ルーキー会 × TERAKOYAFORCE
20190731ルーキー会 × TERAKOYAFORCE20190731ルーキー会 × TERAKOYAFORCE
20190731ルーキー会 × TERAKOYAFORCE
 
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向
 
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウSwtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
 
Swtt2018 sfdgr1 Developer Group ルーキー会が教える!これから始めるSalesforce開発
Swtt2018 sfdgr1 Developer Group ルーキー会が教える!これから始めるSalesforce開発Swtt2018 sfdgr1 Developer Group ルーキー会が教える!これから始めるSalesforce開発
Swtt2018 sfdgr1 Developer Group ルーキー会が教える!これから始めるSalesforce開発
 
Sfdgr 11 20180725_salesforce_summer
Sfdgr 11 20180725_salesforce_summerSfdgr 11 20180725_salesforce_summer
Sfdgr 11 20180725_salesforce_summer
 
幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜
幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜
幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜
 

Sfdgr 15 20190115