Testing, Debugging, and Deployment Flashcards

1
Q

ある開発者が、テスト・クラスで @testSetup アノテーションを使用してデータを作成したいと考えています。このアノテーションを使用する際に注意すべき点は何ですか?
答えを 3 つ選んでください。

A. テストデータへの変更は、各テストメソッドの実行終了後にロールバックされます。
B. クラスのどこかに @isTest(SeeAllData=true) というアノテーションが付けられている場合は、このアノテーションを使用できません。
C. 各 Apex テスト・クラスに対して定義できる @testSetup メソッドは 1 つだけです。
D. テストによってデータが削除された場合は、次のテストを実行する前にセットアップ メソッドを再実行する必要があります。
E. テストをさらに実行する前に、@testSetup メソッドを明示的に呼び出す必要があります。

A

A. テストデータへの変更は、各テストメソッドの実行終了後にロールバックされます。
B. クラスのどこかに @isTest(SeeAllData=true) というアノテーションが付けられている場合は、このアノテーションを使用できません。
C. 各 Apex テスト・クラスに対して定義できる @testSetup メソッドは 1 つだけです。

testSetup アノテーションをクラスで使用できるのは、@isTest アノテーションから (seeAllData=true) オプションが除外されている場合だけです。テスト・クラスで定義できる @testSetup メソッドは 1 つだけで、テスト・メソッドの前に自動的に呼び出されます。フィールドの更新やレコードの削除など、テスト・メソッドによってセットアップ・データに加えられた変更は、次のテスト・メソッドが実行される前に、元のセットアップ状態にロールバックされます。テストメソッド内でテストデータを作成すると、テストメソッドの実行終了後に毎回レコードが削除されるのとは対照的に、テストセットアップ メソッド内で作成されたレコードは、テストクラス全体の実行後にのみ(ロールバックによって)削除されます。この結果、特に複数のテストレコードを扱う場合、テストの実行時間が短縮されます。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

ある開発者が、複数のプロファイルに属する複数のユーザーが使用するカスタムアプリケーションのパフォーマンスをプロファイリングしています。計算オーバーヘッドの共有によるパフォーマンスへの影響を判断するために役立つのは、次のうちどれでしょうか。
答えを1つ選んでください。

A. 最高レベルのアクセス権を持つユーザーに対してパフォーマンス・プロファイリングを実施する。
B. 最小レベルのアクセス権を持つユーザーに対してパフォーマンス・プロファイリングを実施する。
C. 異なるプロファイルを持つ複数のユーザーに対してパフォーマンス・プロファイリングを実行する。
D. システム管理者プロファイルを使用してパフォーマンス・プロファイリングを実行する。

A

C. 異なるプロファイルを持つ複数のユーザーに対してパフォーマンス・プロファイリングを実行する。

異なるロールやプロファイルを持つユーザーを追加することで、パフォーマンス・プロファイリングのステップを反復することは良い習慣である。これは、データ量と共有計算のオーバーヘッドによって引き起こされる可能性のあるパフォーマンスへの影響を判断するのに役立ちます。システム管理者のようなたった一人のユーザーに対してアプリケーションをテストすることは、正確なパフォーマ ンス・プロファイリングに必要な共有関連の計算をシステムが行うことを可能にしません。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

ある開発者が Visualforce コードのチューニングを行っています。彼は、開発者コンソールのパフォーマンスツリーを使用して、さまざまな条件で実行されるテストおよび Visualforce コードのチューニング後に実行されるテストのベンチマークとして使用できるメトリックを記録しています。パフォーマンスツリーで提供され、実行ツリーでは提供されない情報は次のうちどれでしょうか?
答えを 3 つ選んでください。

A. Duration in milliseconds
B. Heap percentage
C. Duration percentage
D. Heap size
E. Iterations

A

B. Heap percentage
C. Duration percentage
E. Iterations

パフォーマンスツリータブでは、リクエストに対して実行された各コンポーネントのミリ秒単位の継続時間、ヒープサイズ、および反復の内訳を提供します。さらに、継続時間のパーセンテージとヒープのパーセンテージを見ることができます。パーセントと反復は実行ツリーでは表示できません。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

ある開発者は、テストデータを生成するために既存のユーティリティクラスを更新することで、オポチュニティとその関連する取引先との間の Apex トリガメカニズム用のテストクラスを記述しています。ユーティリティクラスには、テストクラスでは実行されないメソッドが含まれていたため、コードカバレッジの最適化には問題がありました。以下のユーティリティクラスから、開発者はどのようなオプションを考慮すべきでしょうか?
答えを 2 つ選びなさい。

public class MyTestDataFactory {
   
    public static void createAccounts(Integer num) {
        
        List<Account> records = new List<Account>();        
        for (Integer i = 1; i <= num; i++) { 
            records.add(new Account(name = 'Test Account ' + i)); 
        }
       	insert records;
    }
    
    public static void createOpportunities(Account acc, String stage, Integer num) {
        
        List<Opportunity> records = new List<Opportunity>();        
        for (Integer i = 1; i <= num; i++) {
             records.add(new Opportunity(Name=acc.Name + ' Opportunity ' + i, StageName=stage, CloseDate=System.today().addMonths(1), AccountId=acc.Id));
        }        
        insert records;
    }
    
    public static void createLeads(Integer num) {
        
        List<Lead> records = new List<Lead>();        
        for (Integer i = 1; i <= num; i++) { records.add(new Lead(LastName='Test Lead ' + i, Company='Test')); }
        insert records;
    }
    
    public static void createContacts(Integer num, Id accountId) {
        
        List<Contact> records = new List<Contact>();        
        for (Integer i = 1; i <= num; i++) { records.add(new Contact(LastName='Test Contact ' + i, AccountId=accountId)); }
        insert records;
    } 
}

A. isTestでユーティリティ・クラスをアノテートする。
B. データ作成メソッドを新しいユーティリティ・クラスに移動する。
C. isTestUtility でユーティリティ・クラスをアノテートする。
D. データ作成メソッドをトリガーに移動する

A

A. isTestでユーティリティ・クラスをアノテートする。
B. データ作成メソッドを新しいユーティリティ・クラスに移動する。

テスト・クラスに @isTest を付けると、ユーティリティ・クラスがテスト・ユーティリティ・クラスに変換され、 コード・カバレッジ・パーセンテージの計算から除外されます。ただし、既存のユーティリティ クラスに @isTest が追加されると、テスト以外のコードからは呼び出されなくなり、テスト メソッドでのみ使用されるようになるため、トリガーとなるテスト クラス用に別のテスト ユーティリティ クラスを作成することも考慮する必要があります。

isTestUtility アノテーションはありません。Apex トリガー内部でメソッド(またはクラス)を定義することは可能ですが、メソッドはトリガー内部でしかアクセスできないため、推奨されません。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

ある開発者が、「jest」フレームワークを使用して Lightning ウェブコンポーネントのテストファイルを作成しています。彼女は、コンポーネントがロードされたときに要素に表示されるメッセージを検証するために、以下のコードを書きました。追加のユニットテストを記述する前に、各テストの終了時に DOM がリセットされることを確認したいと思います。このユースケースで、コメントの代わりにどのコードブロックを使うことができますか?

// opportunityDataComponent.test.js
import { createElement } from 'lwc';
import OpportunityDataComponent from 'c/opportunityDataComponent';

describe('c-opportunity-data-component', () => {
    // Add code here

    it('displays title message', () => {
        const element = createElement('c-opportunity-data-component', {
            is: OpportunityDataComponent
        });
        document.body.appendChild(element);

        const title = element.shadowRoot.querySelector('#title');
        expect(title.textContent).toBe('Current Opportunities');
    });
});

A.

afterEach(() => {
    while (document.body.firstChild) {
        document.body.removeChild(document.body.firstChild);
    }
});

B.

afterTest(() => {
    while (document.body.firstChild) {
        document.body.removeChild(document.body.firstChild);
    }
});

C.

clear(() => {
    while (document.body.firstChild) {
        document.body.removeChild(document.body.firstChild);
    }
});

D.

reset(() => {
    while (document.body.firstChild) {
        document.body.removeChild(document.body.firstChild);
    }
});
A

A.

afterEach(() => {
    while (document.body.firstChild) {
        document.body.removeChild(document.body.firstChild);
    }
});

afterEach() メソッドは、テストファイル内の各テストの後で DOM をリセットするために使用します。デフォルトでは、ひとつのテストファイル内でひとつの jsdom インスタンスが共有されます。テストの出力が別のテストに影響を与えないようにするには、 afterEach() メソッドでテスト間のクリーンアップを行うのがベストプラクティスです。このユースケースで使用できる afterTest()、 clear()、 reset() メソッドはありません。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

ある開発者が、取引先レコードとユーザレコードを同じテストメソッドで作成しようとしています。しかし、テストを実行すると、混合 DML エラーが返されます。このエラーを防ぎ、開発者がテストメソッド内で両方のタイプの DML 操作を実行できるようにするには、どうすればよいですか?
答えを 2 つ選んでください。

A. 混合 DML 操作を System.runAs ブロックで囲む。
B. future アノテーションを使用してメソッドを作成し、DML 操作の 1 つを非同期に実行する。
C. 混合 DML 操作を Test.startTest() および Test.stopTest() で囲む。
D. User sObject に対して DML 操作を実行する 2 番目のメソッドを作成する。

A

A. 混合 DML 操作を System.runAs ブロックで囲む。
B. future アノテーションを使用してメソッドを作成し、DML 操作の 1 つを非同期に実行する。

同じトランザクション内で、セットアップ sObject と別の sObject に対する DML 操作を行うことはできません。ただし、System.runAs ブロックで囲むことで、テスト・メソッド内で混在した DML 操作を実行することは可能です。また、@future アノテーションを付けたメソッドを作成し、一方の DML 操作を非同期で実行し、もう一方の DML 操作を元のトランザクションで実行することもできます。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

ある開発者は、ApexコードのSOQLクエリによって返された行数を知る必要があります。この情報の概要をすばやく把握するために、次のうちどれを使用できますか。
答えを1つ選びなさい。

A. Execution Log
B. Execution Tree
C. Execution Stack
D. Executed Units

A

D. 実行ユニット

Execution Overview’の’Executed Units’タブでは、SOQLクエリによって返された行数の概要を素早く見ることができます。実行ログでもこの情報を提供できますが、’Execution Overview’ パネルにアクセスする方が簡単で迅速です。このパネルでは、メソッド、クエリ、ワークフロー、コールアウト、DML 文、検証、トリガ、および Visualforce ページの数に関する情報を提供できます。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

ある開発者は、Apexスケジューラを使用して、特定の時間に特定のテストを非同期で実行する必要があります。この要件に使用できるオブジェクトは次のうちどれですか。
答えを2つ選んでください。

A. ApexTestResult
B. ApexTestQueue
C. ApexTestQueueItem
D. ApexTestSuite

A

A. ApexTestResult
C. ApexTestQueueItem

Apexテストは、ApexTestQueueItemとApexTestResultを使用して非同期で実行できます。テストは、ApexTestQueueItemを使用してApexのジョブキューに追加できます。完了したテストの実行結果は、ApexTestResultを使用して確認できます。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

ある開発者が、<apex:commandButton>コンポーネントを使用して、現在のレコードに対して特定のアクションを実行するボタンを Visualforce ページに作成しました。このボタンをユニットテストでテストするにはどうすればよいですか。
答えを1つ選んでください。</apex:commandButton>

A. ボタンに関連付けられているアクションメソッドを直接呼び出します。
B. JavaScript を使ってボタンのクリックアクションをシミュレートする。
C. Test.setCurrentButtonメソッドを使用して、テストするボタンを指定する。
D. ボタンのonclick属性で実行するテストメソッドを指定する。

A

A. ボタンに関連付けられているアクションメソッドを直接呼び出します。

apex:commandButton コンポーネントに関連付けられたコントローラメソッドは、その action 属性で指定します。Visualforceページのボタンをテストする場合、そのアクションメソッドはユニットテストで直接呼び出されます。

ユニットテストは Apex で記述します。したがって、JavaScript を使用することはできません。onclick属性にはJavaScriptの関数が必要なため、テストメソッドは使用できません。Test.setCurrentButton メソッドはありません。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

ある開発者が、外部 Web サービスにコールアウトし、特定の DML 操作を実行する Apex クラスのパフォーマンスをテストしています。実行概要パネルでさまざまなタイプのトランザクションのタイムラインを分析する際に、関連するプラクティスは次のうちどれですか?
答えを2つ選んでください。

A. 実行ログパネルのログ行は、特定のイベントの詳細を分析することができます。
B. 実行ログとともに実行ツリーを使用し、イベントに関する特定の情報をフィルタリングして取得することができる。
C. パフォーマンス・ツリーを使用して、最も時間のかからないものから、さらにイベントを分析する。
D. Apex イベントの複数の短いバーストは、合計するとかなりの時間がかかる可能性があるため、分析する必要があります。

A

A. 実行ログパネルのログ行は、特定のイベントの詳細を分析することができます。
D. Apex イベントの複数の短いバーストは、合計するとかなりの時間がかかる可能性があるため、分析する必要があります。

実行概要パネルでタイムラインを分析すると、Apexイベントの複数の短いバーストが簡単にかなりの時間になることがあります。これは一般的に非効率なApexループロジックを示しています。パフォーマンス・ツリーは、イベントとその継続時間をトップダウンで表示しますが、最も時間がかかるイベントからイベントを分析するために使用します。パフォーマンス・ツリーは、特定のイベントをフィルタリングして表示するために、実行ログと一緒に使用できます。実行ログ・パネルのログ行は、イベントの詳細を分析できます。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

あるSalesforce開発者は、顧客オポチュニティのステージが「契約締結」から「クローズド獲得」に変更された場合に、一連のギフトレコードを生成する機能の構築を依頼されました。Apex テストはサンドボックスで正常にパスしました。本番環境へのデプロイ中、テストのコードカバレッジは0%です。以下のテストクラスを考えると、どのような原因が考えられますか?

@isTest(SeeAllData=true)
public class OpportunityTriggerTest {
 
    @isTest
    static void testGifts() {
        
        Opportunity opp = [SELECT Id, Account.Id, Account.Recipient_Count\_\_c 
                           FROM Opportunity 
                           WHERE StageName = 'Contract Signing' 
                           LIMIT 1];
        
        opp.StageName = 'Closed Won';
        update opp;
 
        List<Gift\_\_c> gifts = [SELECT Id, Name 
                               FROM Gift\_\_c 
                               WHERE Account\_\_r.Id = :opp.Account.Id 
                               AND Opportunity\_\_r.Id = :opp.Id];
        
        // check that the correct number of gift items are generated
        System.assertEquals(gifts.size(), opp.Account.Recipient_Count\_\_c);
    }
}

A. ターゲットの org にテストクラスが必要とするデータがない。
B. アノテーションに isParallel=true が含まれていない。
C. クラスのアノテーションは @isTest(AccessData=true) であるべきです。
D. テストは、System.runAs() を使用してシステム・モードで実行する必要があります。

A

A. ターゲットの org にテストクラスが必要とするデータがない。

ベストプラクティスとして、テストクラスはそれ自身のテストデータを生成し、テストを実行するために org のデータに依存しないようにします。上のシナリオでは、もしターゲット org に ‘Contract Signing’ というステージを持つ Opportunity レコードがなければ、エラーが発生してテストが終了し、コードカバレッジが 0% になります。

isTest(AccessData=true) は無効です。テストはデフォルトでシステム・モードで実行されるため、System.runAs() を使用する必要はありません。isParallel=true を追加すると、テストが並列実行されるだけです。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

開発者は、拡張コントローラの機能をテストする必要があります。以下のコードでは、標準コントローラのインスタンスをテストメソッドで作成しています。
ControllerExtension’がコントローラ拡張クラスの名前である場合、次のコード文のどれが正しいインスタンス化方法でしょうか?
答えを1つ選びなさい。

ApexPages.StandardController sc = new ApexPages.StandardController(acc);

A. ControllerExtension ce = new ControllerExtension();
B. ControllerExtension ce = new ControllerExtension(acc.Id);
C. ControllerExtension ce = new ControllerExtension(sc);
D. ControllerExtension ce = new ControllerExtension(acc);

A

C. ControllerExtension ce = new ControllerExtension(sc);

コントローラの拡張モジュールは、コントローラの変数を拡張モジュールの コンストラクタのパラメータとして渡すことでインスタンス化されます。この場合は、変数 ‘sc’ をパラメータとして渡します。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

あるSalesforce開発者が、Visualforceページ用のカスタムコントローラを作成しました。このコントローラには、execute()というメソッドが含まれており、特定のロジックを実行してPageReferenceオブジェクトを返します。カスタムコントローラを単体テストで「controller」という変数としてインスタンス化する場合、その変数を使用してメソッドをテストする方法を示す選択肢は次のうちどれですか?

A. PageReference pr = Test.setCurrentPage(controller.execute());
B. PageReference pr = ApexPages.currentPage().controller.execute();
C. PageReference pr = controller.execute();
D. PageReference pr = ApexPages.controller.execute();

A

C. PageReference pr = controller.execute();

カスタムコントローラやコントローラ拡張モジュールでアクションメソッドをテストする場合は、 メソッドを直接コールしてユーザのアクションをシミュレートします。メソッドがPageReferenceを返す場合は、System.assertEquals()とgetUrl()メソッドで検証できます。

その他のオプションには、無効な構文または Apex メソッドの不適切な使用が含まれます。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Webサービスのコールアウトをテストする場合、テスト中に使用するモックレスポンスを指定するには、どのメソッドを呼び出す必要がありますか?
答えを1つ選んでください。

A. Test.setMock()
B. Test.MockResponse()
C. Test.Mock()
D. Test.startMock()

A

A. Test.setMock()

コールアウトテストの前に Test.setMock() を使って、モックレスポンスを提供するクラスを指定します。このメソッドをコールしないと、テストは失敗します。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

コンポーネントがレンダリングされたときにページにテキストが表示されることをテストするために、’WelcomeApp’ という名前の Aura コンポーネントに対してユニットテストが作成されました。しかし、テストを実行すると、document.getElementById(「header」) が null 値を返すというエラーが発生します。しかし、指定された属性idを持つ要素はコンポーネントのマークアップで定義されています。何がこのエラーを引き起こしているのでしょうか?

<!-- WelcomeApp markup: -->
<aura:component>
    <div id="header">Welcome!</div>
    <div id="content">
        <!-- ... -->
    </div>
</aura:component>

// WelcomeApp unit test:
describe('WelcomeApp tests', function () {
    it('displays a welcome message', function (done) {
        $T.createComponent("c:WelcomeApp", {}, false)
            .then(function (cmp) {
                let welcomeMessage = document.getElementById("header").textContent; // get the text content of the element
                expect(welcomeMessage).toContain("Welcome!"); // validate that the text matches an expected string
                done();
            }).catch(function (e) {
                done.fail(e);
            });
    });
});

A. ユニットテストの実行時に Aura コンポーネントがレンダリングされていません。
B. Lightning テストサービスは document.getElementById() 関数をサポートしていません。
C. T.createComponent 関数が Aura コンポーネントの参照に無効な構文を使用している。
D. document.getElementById() 関数は、コールバックの前に呼び出す必要があります。

A

A. ユニットテストの実行時に Aura コンポーネントがレンダリングされていません。

Lightning Testing Service には $T Utility オブジェクトが含まれています。このオブジェクトには、コンポーネントを DOM に挿入したり、コンポーネントの属性を定義したりするためのユニットテストで使用するメソッドが含まれています。T.createComponent() メソッドには 3 つのパラメータがあります。最初のパラメータは、作成するコンポーネントを指定するために使用します。二番目のパラメータは、指定したコンポーネントの属性を事前に設定するために使用します。3番目のパラメータをtrueに設定すると、コンポーネントがレンダリングされ、falseに設定するとレンダリングされません。上のコードでは、このパラメータはfalseに設定されています。つまり、コンポーネントはページ上にレンダリングされません。このため、document.getElementById(「header」)はnullを返します。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

物流会社で働くSalesforce開発者は、Queueable Apexを使用して業務を実行し、各業務の進捗状況を適宜監視しています。Apexコードを本番環境にデプロイする前に、テストクラスを作成する必要があります。job’がキューアブルオブジェクトのインスタンスを表す場合、有効なユニットテストは以下の選択肢のどれになりますか?

A. System.enqueueJob(job);
B. System.asyncTest(job);
C.
Test.startTest();
System.enqueueJob(job);
Test.stopTest();
D.
Test.startTest();
job.execute();
Test.stopTest();

A

C.
Test.startTest();
System.enqueueJob(job);
Test.stopTest();

キューイング可能なジョブには、非同期で実行されるApexコードが含まれています。非同期コードをテストするには、Test.startTest()メソッドとTest.stopTest()メソッドの間にコードを配置します。そうすることで、Test.stopTest() メソッドの後でコードが同期的に実行されるようになります。その後にアサーション文を追加して、ジョブの結果を検証します。

System クラスには ‘asyncTest’ メソッドは存在しません。Queuable Apexクラスの’execute’メソッドは、インスタンスがキューで処理されるときに内部的に自動的に呼び出されます。

17
Q

displayTotalPrice() という Apex メソッドは、generateDiscount() という別のメソッドを使用して、会員ステータスと顧客による購入の合計金額に基づいて購入に適用される割引を計算します。開発者は、generateDiscount() メソッドのレスポンスをモックする displayTotalPrice() メソッドのユニットテストを構築する必要があります。次の選択肢のうち、Apex テストクラスでスタビングがどのように実装されるかを説明しているものはどれですか?
答えを 3 つ選んでください。

A. テスト対象のコードが Test.stopTest() の直後に実行されるようにします。
B. スタブ・インスタンスをモック対象のApexクラスのデータ型にキャストします。
C. System.Test.createStub() メソッドを呼び出して、スタブ・クラスをインスタンス化します。
D. スタブ・クラスを@isTestでアノテーションし、ユニット・テストで使用できるようにします。
E. System.StubProvider インタフェースを実装する Apex クラスを作成します。

A

B. スタブ・インスタンスをモック対象のApexクラスのデータ型にキャストします。
C. System.Test.createStub() メソッドを呼び出して、スタブ・クラスをインスタンス化します。
E. System.StubProvider インタフェースを実装する Apex クラスを作成します。

スタブ・クラスを作成するには、System.StubProviderインタフェースを実装するApexクラスが必要です。System.StubProviderインターフェイスには、’handleMethodCall’メソッドがあり、どのメソッドが呼び出されたかを判断するために使用できるいくつかのパラメータを含んでいます。

@isTest
public class MockMyClass implements System.StubProvider {
 
   public Object handleMethodCall(Object stubbedObject, String stubbedMethodName, Type returnType,
                                 List<Type> listOfParamTypes,List<String> listOfParamNames, List<Object> listOfArgs){
      
       // return fake value when the myDependencyMethod is called in the test
       if (stubbedMethodName == 'myDependencyMethod') {
          return false;
       }
     
      // or, return true, for example, if the return type of an invoked method is Boolean
      if (returnType.getName() == 'Boolean') {
            return true;
      }
     
      return null;                            
   }
}

スタブは、Test.createStub() メソッドを呼び出すことで作成できる。最初の引数には、スタブを作成するクラスの型を渡します。第 2 引数には、System.StubProvider を実装するクラスのインスタンスが渡されます。Test.createStub() は Object データ型を返すので、その返り値をスタブ・クラスのデータ型にキャストし直す必要があります。

MyClass vm = (MyClass) Test.createStub(MyClass.class, new MockMyClass());

テストされるコードでスタブを使用するコードは、Test.startTest() と Test.stopTest() メソッドの間で実行する必要があります。スタブ・クラスをコード・カバレッジの計算から除外し、テスト・クラスだけに公開するのは一般的なやり方ですが、@isTest でアノテーションする必要はありません。

18
Q

組織全体のメンテナンス方法は、企業のハウスキーピングプロセスの一環として定期的に実行される。ベストプラクティスとして、オペレーションはガバナ ーリミットを回避するためにリミットメソッドを使用します。以下のメソッドはどのような制限を回避するように構成されていますか?
答えを2つ選んでください。

public class OpportunityMaintenance {

    public static void deleteOpportunities () {
	
        if (Limits.getQueries() <= Limits.getLimitQueries()) {
            
            // fetch opportunities marked for deletion
            List<Opportunity> opps = [SELECT Id FROM Opportunity WHERE Is_Delete\_\_c = TRUE];            
            
            if (Limits.getDmlStatements() <= Limits.getLimitDmlStatements()) {
                
                delete opps;
            }
        } 
    }
}

A. 発行可能なクエリー総数
B. 呼び出せるDML文の総数
C. クエリから返されるレコードの総数
D. DMLステートメントを処理できるレコードの総数

A

A. 発行可能なクエリー総数
B. 呼び出せるDML文の総数

Limits.getLimitQueries() メソッドは、発行可能なクエリの合計数を決定します。Limits.getQueries() を使用して、既に発行されたクエリの現在の数を追跡し、トランザクションが許容数を超えないようにします。Limits.getLimitDmlStatements メソッドは、呼び出すことができる DML 文の総数を決定し、Limits.getDmlStatements() を使用して、既に実行された文の現在の数を追跡します。

Limits.getLimitQueryRows() を使用して、SOQL クエリから返せるレコードの合計数を決定します。Limits.getLimitDMLRows() を使用して、DML 文などのデータベース操作を伴う処理を行えるレコードの総数を判断します。

19
Q

Aura コンポーネントは、サードパーティの分析プラットフォームから収集されたトラフィックデータの拡張レポートを提供するために開発されています。その機能のテストを自動化するために、Jasmine テストフレームワークを使用してユニットテストを作成する必要があります。このコンポーネントは、クライアントサイドコントローラのアクションに関連付けられた<aura:method>を含んでおり、このアクションが呼び出されると、特定のブール値の<aura:attribute>をtrueに設定し、設定パネルをページに表示します。メソッド名が'displaySettings'、属性名が'isDisplaySettings'の場合、メソッドの動作をテストするために、以下のJavaScriptコードの'then'コールバックにどのコードを追加できますか?</aura:attribute></aura:method>

describe('Test TrafficAnalytics Methods', function () {
    it('sets the isDisplaySettings to true when the displaySettings method is invoked', function (done) {
        $T.createComponent('c:TrafficAnalytics', null)
            .then(function (cmp) {
                // code here...
            }).catch(function (e) {
                done.fail(e);
            });
    });
});

A.

cmp.displaySettings();
expect(cmp.get('v.isDisplaySettings')).toBe(true);
done();

B.

cmp.displaySettings();
expect(cmp.get('c.isDisplaySettings')).toBe(true);
done();

C.

cmp.invokeAction('displaySettings');
expect(cmp.get('v.isDisplaySettings')).toBe(true);
done();

D.

cmp.invokeAction('displaySettings');
expect(cmp.getAttribute('v.isDisplaySettings')).toBe(true);
done();
A

A.

cmp.displaySettings();
expect(cmp.get('v.isDisplaySettings')).toBe(true);
done();

コンポーネント内のメソッドを呼び出すには、cmp.displaySettings() のように、’then’ メソッドのコールバック関数に渡されるインスタンスからメソッドを直接呼び出します。<aura:attribute> の値を取得するには、属性名の前に 'v.' を付加した値を get() メソッドに渡します (例: cmp.get('v.isDisplaySettings')。</aura:attribute>

メソッドの動作をテストするには、expect() 関数を使用して実際の値を保持します。toBe() 関数は、Matcher 関数と呼ばれ、期待値を保持するために使用されます。実際の値が期待値と一致しない場合、テストは失敗します。

コンポーネント内の属性を参照するには、接頭辞 ‘v.’ を使用します。クライアント側のコントローラの関数を参照するには、接頭辞 ‘c.’ を使用します。invokeAction’ および ‘getAttribute’ 関数は、 コンポーネントオブジェクトには存在しません。

20
Q

開発者は、レコードの保存中に発生したすべてのアクションとその順序を決定する必要があります。この要件に適したデベロッパーコンソールツールはどれですか?
答えを2つ選んでください。

A. Stack Tree
B. Execution Log
C. Save Order
D. Source Panel

A

B. Execution Log
C. Save Order

実行ログは、すべてのイベントを発生した順番にキャプチャします。Execution Overview の Save Order セクションは、いつイベントが発生したかを色分けして表示します。ソースパネルには、実行されたコードが表示される。スタックツリーは、データを階層的に表示します。

21
Q

ある開発者が、新しい Apex メソッドの動作を検証するためにユニットテストを作成しています。メソッドの期待される出力はNULLであってはならず、定義済みの値と等しくなければなりません。変数’output’がApexメソッドによって返される出力を表し、’value’が定義済みの値を表す場合、次の選択肢のどれを単体テストのアサーションとして使用できますか?
答えを 2 つ選んでください。

A. System.isEqual(value, output);
B. System.isNotNull(value);
C. Assert.areEqual(value, output);
D. Assert.isNotNull(output);

A

C. Assert.areEqual(value, output);
D. Assert.isNotNull(output);

Assert.isNotNull() は、指定したパラメータが NULL の場合にアサーションに失敗します。Assert.areEqual() は、指定した 2 つのパラメータが互いに等しくない場合に アサーション失敗をスローします。System クラスの assert メソッドと同様、アサーションの失敗によってこれらのメソッドからスローされる致命的なエラーは捕捉したり処理したりできません。Assert クラスには、コードの動作や出力を検証するために使用できるメソッドが他にもいくつかあります。

System.isNotNull() および System.isEqual() メソッドは存在しません。System クラスを使用して値が別の値と等しいかどうかをテストするには、System.assertEquals() メソッドを使用します。値が NULL と等しいかどうかをテストする場合にも、同じメソッドを使用できます。

22
Q

Developer Console で作業している開発者は、かなりの時間がかかりそうなユニットテストクラスを実行する必要があります。また、最近のApexトランザクションの実行ログの分析など、他のタスクもコンソールで実行する必要があります。テストの実行中に、開発者がDeveloper Consoleの他の領域で作業するにはどうすればよいでしょうか。
答えを 2 つ選んでください。

A. テストメニューで「常に非同期で実行する」オプションを選択します。
B. SOAP API から runTests() をコールする。
C. Setup の ‘Apex Classes’ ページからテストクラスを実行します。
D. Setup の ‘Apex Test Execution’ ページからテスト・クラスを実行します。

A

A. テストメニューで「常に非同期で実行する」オプションを選択します。
D. Setup の ‘Apex Test Execution’ ページからテスト・クラスを実行します。

単体テストクラスは、Salesforce のユーザインタフェースからセットアップの「Apex テスト実行」ページに移動して実行できます。このページから実行されるテストは非同期で実行されるため、開発者はテストクラスの実行が完了するまで待つ必要がありません。このページはテストのステータスをリフレッシュし、テストが完了した後に結果を表示します。また、Developer Console の Test メニューで ‘Always Run Asynchronously’ オプションを選択することで、単一のテストクラスを非同期で実行することもできます。Setup の ‘Apex Classes’ ページでは、すべてのテストの実行のみが可能です。同期的にテストを実行するには、SOAP API の runTests() 呼び出しを使用します。

23
Q

Developer Console で実行する Apex テストのコードカバレッジをスキップすることに関する次の記述のうち、正しいものはどれですか?
答えを3つ選んでください。

A. テスト実行の合格または不合格のステータスをより迅速にフィードバックします。
B. スイートマネージャを使用して、コードカバレッジをスキップできます。
C. コードカバレッジをスキップしても、テストの実行速度には影響しません。
D. Apex テストカバレッジに関するデータは保存されません。
E. コードカバレッジは、新しいテストの実行中にスキップできます。

A

A. テスト実行の合格または不合格のステータスをより迅速にフィードバックします。
D. Apex テストカバレッジに関するデータは保存されません。
E. コードカバレッジは、新しいテストの実行中にスキップできます。

コード・カバレッジをスキップすることで、テスト実行の速度が向上し、テスト実行の合否に関する フィードバックをより迅速に受け取ることができます。カバレッジ情報に関するデータは保存されません。Suite Manager を使用してコード カバレッジをスキップすることはできませんが、スイートの新しいテス ト実行を作成するときにスキップすることは可能です。また、1 つのテストクラスの新しいテスト実行を作成するときに、このオプションを選択することもできます。