この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

テストの例

単純なマイル追跡アプリケーションでテストを実行します。アプリケーションの既存のコードは、1 日に入力されるマイル数が 500 マイルを超えないことを確認します。主オブジェクトは Mileage__c というカスタムオブジェクトです。このテストは、300 マイルが含まれる 1 つのレコードを作成し、300 マイルのみが記録されていることを検証します。次に、ループでそれぞれに 1 マイルが含まれる 200 レコードを作成します。最後に、合計 500 マイル (元の 300 マイルと新しいマイル) が記録されていることを確認します。全体のテストクラスを次に示します。次のセクションでは、コードの特定の部分の手順を説明します。

1@isTest
2private class MileageTrackerTestSuite {
3
4    static testMethod void runPositiveTestCases() {
5        
6        Double totalMiles = 0;
7        final Double maxtotalMiles = 500;
8        final Double singletotalMiles = 300;
9        final Double u2Miles = 100;
10  
11        
12        //Set up user
13        User u1 = [SELECT Id FROM User WHERE Alias='auser'];
14        
15        //Run As U1
16        System.RunAs(u1){
17
18            
19        System.debug('Inserting 300  miles... (single record validation)');
20        
21        Mileage__c testMiles1 = new Mileage__c(Miles__c = 300, Date__c = System.today());
22        insert testMiles1;
23        
24        //Validate single insert
25        for(Mileage__c m:[SELECT miles__c FROM Mileage__c 
26            WHERE CreatedDate = TODAY
27            and CreatedById = :u1.id
28            and miles__c != null]) {
29                totalMiles += m.miles__c;
30            }
31        
32        Assert.areEqual(singletotalMiles, totalMiles);
33    
34    
35        //Bulk validation   
36        totalMiles = 0; 
37        System.debug('Inserting 200 mileage records... (bulk validation)');
38        
39        List<Mileage__c> testMiles2 = new List<Mileage__c>();
40        for(integer i=0; i<200; i++) {
41            testMiles2.add( new Mileage__c(Miles__c = 1, Date__c = System.today()) );
42        }
43        insert testMiles2;
44       
45        for(Mileage__c m:[SELECT miles__c FROM Mileage__c
46            WHERE CreatedDate = TODAY
47            and CreatedById = :u1.Id
48            and miles__c != null]) {
49                totalMiles += m.miles__c;
50            }
51        
52        Assert.areEqual(maxtotalMiles, totalMiles);
53
54        }//end RunAs(u1)
55
56
57       //Validate additional user:
58       totalMiles = 0;
59       //Setup RunAs
60       User u2 = [SELECT Id FROM User WHERE Alias='tuser'];
61       System.RunAs(u2){
62        
63        Mileage__c testMiles3 = new Mileage__c(Miles__c = 100, Date__c = System.today());
64        insert testMiles3;
65        
66                for(Mileage__c m:[SELECT miles__c FROM Mileage__c
67            WHERE CreatedDate = TODAY
68            and CreatedById = :u2.Id
69            and miles__c != null]) {
70                totalMiles += m.miles__c;
71            }
72        //Validate 
73        Assert.areEqual(u2Miles, totalMiles);
74        
75       } //System.RunAs(u2)
76
77      
78    } // runPositiveTestCases()
79   
80    static testMethod void runNegativeTestCases() {
81
82        User u3 = [SELECT Id FROM User WHERE Alias='tuser'];
83        System.RunAs(u3) {
84
85           System.debug('Inserting a record with 501 miles... (negative test case)'); 
86
87           Mileage__c testMiles3 = new Mileage__c( Miles__c = 501, Date__c = System.today() );
88
89           try {
90               insert testMiles3;
91               Assert.fail('DmlException expected');
92           } catch (DmlException e) {
93               //Assert Status Code
94               Assert.areEqual('FIELD_CUSTOM_VALIDATION_EXCEPTION', e.getDmlStatusCode(0));
95            
96               //Assert field
97               Assert.areEqual(Mileage__c.Miles__c, e.getDmlFields(0)[0]);
98                        
99               //Assert Error Message
100               Assert.isTrue(e.getMessage().contains(
101                'Mileage request exceeds daily limit(500): [Miles__c]'),
102                'DMLException did not contain expected validation message:' + e.getMessage() );
103            
104             } //catch
105           } //RunAs(u3) 
106    } // runNegativeTestCases() 
107  
108    
109} // class MileageTrackerTestSuite

ポジティブテストケース

上記のコードの、単一レコードおよび複数レコードのポジティブテストケースの手順は、次のとおりです。

  1. デバッグログにテキストを追加して、コードの次のステップを示します。
    1System.debug('Inserting 300 more miles...single record validation');
  2. Mileage__c オブジェクトを作成し、データベースに挿入します。
    1Mileage__c testMiles1 = new Mileage__c(Miles__c = 300, Date__c = System.today() );
    2insert testMiles1;
  3. 挿入されたレコードを返してコードを検証します。
    1for(Mileage__c m:[SELECT miles__c FROM Mileage__c 
    2   WHERE CreatedDate = TODAY 
    3   and CreatedById = :createdbyId 
    4   and miles__c != null]) {
    5       totalMiles += m.miles__c;
    6    }
  4. Assert.areEqual メソッドを使用して、期待どおりの結果が返されることを確認します。
    1Assert.areEqual(singletotalMiles, totalMiles);
  5. 次のテストに移る前に、合計マイル数を 0 に再設定します。
    1totalMiles = 0;
  6. 200 レコードの一括挿入を作成して、コードを検証します。
    まず、デバッグログにテキストを追加し、コードの次のステップを示します。
    1System.debug('Inserting 200 Mileage records...bulk validation');
  7. 次に 200 件の Mileage__c レコードを挿入します。
    1List<Mileage__c> testMiles2 = new List<Mileage__c>();
    2for(Integer i=0; i<200; i++){
    3testMiles2.add( new Mileage__c(Miles__c = 1, Date__c = System.today()) );
    4   }
    5insert testMiles2;
  8. Assert.areEqual を使用して、期待どおりの結果が返されることを確認します。
    1for(Mileage__c m:[SELECT miles__c FROM Mileage__c 
    2   WHERE CreatedDate = TODAY 
    3   and CreatedById = :CreatedbyId 
    4   and miles__c != null]) {
    5       totalMiles += m.miles__c;
    6    }
    7       Assert.areEqual(maxtotalMiles, totalMiles);

ネガティブテストケース

上記のコードのネガティブテストケースの手順は、次のとおりです。

  1. runNegativeTestCases という静的テストメソッドを作成します。
    1static testMethod void runNegativeTestCases(){
  2. デバッグログにテキストを追加して、コードの次のステップを示します。
    1System.debug('Inserting 501 miles... negative test case');
  3. 501 マイルの Mileage__c レコードを作成します。
    1Mileage__c testMiles3 = new Mileage__c(Miles__c = 501, Date__c = System.today());
  4. insert ステートメントを try/catch ブロック内に配置します。これで、検証の例外を捕捉し、生成されたエラーメッセージを表示できます。Assert.fail メソッドを使用して、検証の例外が予期されることを明確に確認します。
    1try {
    2     insert testMiles3;
    3     Assert.fail('DmlException expected');
    4     } catch (DmlException e) {
  5. Assert.areEqual および Assert.isTrue メソッドを使用してテストを実行します。次のコードを、前に作成した catch ブロックに追加します。
    1//Assert Status Code
    2Assert.areEqual('FIELD_CUSTOM_VALIDATION_EXCEPTION', e.getDmlStatusCode(0));
    3            
    4//Assert field
    5Assert.areEqual(Mileage__c.Miles__c, e.getDmlFields(0)[0]);
    6                        
    7//Assert Error Message
    8Assert.isTrue(e.getMessage().contains(
    9  'Mileage request exceeds daily limit(500): [Miles__c]'),
    10  'DMLException did not contain expected validation message:' + e.getMessage() );

セカンドユーザーとしてのテスト

上記のコードを、セカンドユーザーとして実行する手順は次のとおりです。

  1. 次のテストに移る前に、合計マイル数を 0 に再設定します。
    1totalMiles = 0;
  2. 次のユーザーを設定します。
    1User u2 = [SELECT Id FROM User WHERE Alias='tuser'];
    2       System.RunAs(u2){
  3. デバッグログにテキストを追加して、コードの次のステップを示します。
    1System.debug('Setting up testing - deleting any mileage records for ' +
    2            UserInfo.getUserName() +
    3            ' from today');
  4. 次に 1 件の Mileage__c レコードを挿入します。
    1Mileage__c testMiles3 = new Mileage__c(Miles__c = 100, Date__c = System.today());
    2insert testMiles3;
  5. 挿入されたレコードを返してコードを検証します。
    1for(Mileage__c m:[SELECT miles__c FROM Mileage__c 
    2   WHERE CreatedDate = TODAY 
    3   and CreatedById = :u2.Id 
    4   and miles__c != null]) {
    5       totalMiles += m.miles__c;
    6    }
  6. Assert.areEqual メソッドを使用して、期待どおりの結果が返されることを確認します。
    1Assert.areEqual(u2Miles, totalMiles);