質問

Salesforce Apexコードには、私が理解していない動作が見られます。コードセキュリティルールを破っているようです。私はこのようなものになるコントローラーを持っています:

public with sharing class CaseController {

    //Properties
    public Case TheCase { get; private set; }

    //
    //Constructor
    public CaseController(ApexPages.StandardController controller) {
        //Some unimportant stuff
    }

    //
    //Validates all data coming in from the view and saves the case
    public PageReference Save() {
        //Some other unimportant stuff
    }
 }

そして、次のように見えるテスト:

private static testMethod void Save_WithCompleteCase_SavesCase() 
{
    //Given
    User user = GetTestUser('Standard User');
    Product2 theProduct = GetTestProduct();
    Case theCase = GetTestCase(user, theProduct);

    System.runAs(user) {

        //When
        CaseController controller = new CaseController(new ApexPages.StandardController(theCase));
        controller.TheCase.Subject = 'Test Case'; //Making a change to test it saved
        PageReference page = controller.Save();

        //Then

    }
 }

私のコントローラーには「TheCase」に関するプライベートセッターがありますが、テストクラスでその価値を変更できることに注意してください。このコードは機能し、Salesforceによって処理されます。なんで?テストクラスについて、他のクラスのプライベートメンバーにアクセスできるようにする特別なものはありますか?

ありがとう!!

役に立ちましたか?

解決

ああ、以前ははっきりと考えていませんでした。セッターはケースプロパティ自体のプライベートですが、主題などのケースのプロパティはまだ公開されています。

ケースのプロパティプライベートセットを作成すると、コントローラーがケースがその下から変更されることからのみ保護されます。

ごめん!!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top