Apex でのプラットフォームイベントトリガのテスト
Apex テストを追加して、プラットフォームイベントトリガが適切に機��することを確認します。Apex コード (トリガを含む) をパッケージ化または本番にリリースするには、Apex コードがテストされており、十分なコードカバー率が確保されている必要があります。Apex テストでプラットフォームイベントを公開するには、publish ステートメントを Test.startTest() ステートメントと Test.stopTest() ステートメントで囲みます。
publish メソッドを Test.startTest() ステートメントと Test.stopTest() ステートメントの間でコールします。テストコンテキスト内で、publish メソッドは公開操作をキューに追加します。Test.stopTest() ステートメントによって、イベントの公開が実行されます。Test.stopTest() ステートメントの後にユーザ独自の検証を含めます。
1// Create test events
2Test.startTest();
3// Publish test events
4Test.stopTest();
5// Perform validation here1 つのテストメソッドで最大 500 個のイベントを公開できます。
例
次のサンプルテストクラスには 2 つのテストメソッドが含まれます。testValidEvent メソッドは、イベントの公開が成功することを確認し、関連付けられたトリガを起動します。testInvalidEvent メソッドは、必須項目が欠落したイベントの公開が失敗することを検証します。トリガは起動されません。testValidEvent メソッドは 1 つの Low_Ink__e イベントを作成します。Test.stopTest() の後、これは SOQL クエリを実行し、ケースレコードが作成されること、つまりトリガが起動されたことを検証します。2 番目のテストメソッドは同様のプロセスに従いますが、無効なテストを目的とします。
この例では、Low_Ink__e イベントおよび関連付けられたトリガが組織で定義されている必要があります。
1@isTest
2public class EventTest {
3 @isTest static void testValidEvent() {
4
5 // Create a test event instance
6 Low_Ink__e inkEvent = new Low_Ink__e(Printer_Model__c='MN-123',
7 Serial_Number__c='10013',
8 Ink_Percentage__c=0.15);
9
10 Test.startTest();
11
12 // Publish test event
13 Database.SaveResult sr = EventBus.publish(inkEvent);
14
15 Test.stopTest();
16
17 // Perform validations here
18
19 // Verify SaveResult value
20 System.assertEquals(true, sr.isSuccess());
21
22 // Verify that a case was created by a trigger.
23 List<Case> cases = [SELECT Id FROM Case];
24 // Validate that this case was found
25 System.assertEquals(1, cases.size());
26 }
27
28 @isTest static void testInvalidEvent() {
29
30 // Create a test event instance with invalid data.
31 // We assume for this test that the Serial_Number__c field is required.
32 // Publishing with a missing required field should fail.
33 Low_Ink__e inkEvent = new Low_Ink__e(Printer_Model__c='MN-123',
34 Ink_Percentage__c=0.15);
35
36 Test.startTest();
37
38 // Publish test event
39 Database.SaveResult sr = EventBus.publish(inkEvent);
40
41 Test.stopTest();
42
43 // Perform validations here
44
45 // Verify SaveResult value - isSuccess should be false
46 System.assertEquals(false, sr.isSuccess());
47
48 // Log the error message
49 for(Database.Error err : sr.getErrors()) {
50 System.debug('Error returned: ' +
51 err.getStatusCode() +
52 ' - ' +
53 err.getMessage()+' - '+err.getFields());
54 }
55
56 // Verify that a case was NOT created by a trigger.
57 List<Case> cases = [SELECT Id FROM Case];
58 // Validate that this case was found
59 System.assertEquals(0, cases.size());
60 }
61}