TestSetup アノテーション
Salesforce開発者のなかでも使っている人を見るほうが少ない印象、、
けど使ったほうが絶対いいと思うので個人的に布教しています(*'ω'*)
TestSetup アノテーションってなに
詳しくはTestSetup アノテーションの開発者ガイド↓を置いておくので読んでくだされ。
この中に
テスト設定メソッドで作成されたレコードは、テストクラス内のすべてのテストメソッドで使用でき
って書いてて、これが重要。
データなんてテストメソッドごとに作ればいい?ほんとに?
ってことで中身は適当ですが、
TestSetup アノテーションを使用して取引先と商談のレコードを作るテストクラス
と
TestSetup アノテーションを使用せず、テストメソッドごとに取引先と商談のレコードを作るテストクラス
を簡単に書いてみました。
TestSetup使用あり
@isTest
private class SetupTest {
@TestSetup
static void setup(){
// 取引先を作成
Account acc = TestDataFactory.createAccount(true);
// 商談を作成
Opportunity opp = TestDataFactory.createOpportunity(acc.Id, true);
}
@isTest
static void UpdateOpportunityTest1() {
Opportunity opp = [SELECT Id FROM Opportunity LIMIT 1];
Test.startTest();
piepie001.UpdateOpportunity(opp.Id, 1);
Test.stopTest();
}
@isTest
static void UpdateOpportunityTest2() {
Opportunity opp = [SELECT Id FROM Opportunity LIMIT 1];
Test.startTest();
piepie001.UpdateOpportunity(opp.Id, 2);
Test.stopTest();
}
@isTest
static void UpdateOpportunityTest3() {
Opportunity opp = [SELECT Id FROM Opportunity LIMIT 1];
Test.startTest();
piepie001.UpdateOpportunity(opp.Id, 3);
Test.stopTest();
}
@isTest
static void UpdateOpportunityTest4() {
Opportunity opp = [SELECT Id FROM Opportunity LIMIT 1];
Test.startTest();
piepie001.UpdateOpportunity(opp.Id, 4);
Test.stopTest();
}
@isTest
static void UpdateOpportunityTest5() {
Opportunity opp = [SELECT Id FROM Opportunity LIMIT 1];
Test.startTest();
piepie001.UpdateOpportunity(opp.Id, 5);
Test.stopTest();
}
}
TestSetup使用なし
@isTest
private class NoSetupTest {
@isTest
static void UpdateOpportunityTest1() {
// 取引先を作成
Account acc = TestDataFactory.createAccount(true);
// 商談を作成
Opportunity opp = TestDataFactory.createOpportunity(acc.Id, true);
Test.startTest();
piepie001.UpdateOpportunity(opp.Id, 1);
Test.stopTest();
}
@isTest
static void UpdateOpportunityTest2() {
// 取引先を作成
Account acc = TestDataFactory.createAccount(true);
// 商談を作成
Opportunity opp = TestDataFactory.createOpportunity(acc.Id, true);
Test.startTest();
piepie001.UpdateOpportunity(opp.Id, 2);
Test.stopTest();
}
@isTest
static void UpdateOpportunityTest3() {
// 取引先を作成
Account acc = TestDataFactory.createAccount(true);
// 商談を作成
Opportunity opp = TestDataFactory.createOpportunity(acc.Id, true);
Test.startTest();
piepie001.UpdateOpportunity(opp.Id, 3);
Test.stopTest();
}
@isTest
static void UpdateOpportunityTest4() {
// 取引先を作成
Account acc = TestDataFactory.createAccount(true);
// 商談を作成
Opportunity opp = TestDataFactory.createOpportunity(acc.Id, true);
Test.startTest();
piepie001.UpdateOpportunity(opp.Id, 4);
Test.stopTest();
}
@isTest
static void UpdateOpportunityTest5() {
// 取引先を作成
Account acc = TestDataFactory.createAccount(true);
// 商談を作成
Opportunity opp = TestDataFactory.createOpportunity(acc.Id, true);
Test.startTest();
piepie001.UpdateOpportunity(opp.Id, 5);
Test.stopTest();
}
}
実行速度を見てみましょう
念のため3回試行します。
1回目
2回目
3回目
結果
取引先と商談を1レコード作るだけでこの差です。
どちらが良いかは、言わずもがなですね!
あとがき
テストクラスに関しては思想強めのぴえさんです。
ネタはいくつかあるので他にも書いてまとめる予定(*'ω'*)