質問
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によって処理されます。なんで?テストクラスについて、他のクラスのプライベートメンバーにアクセスできるようにする特別なものはありますか?
ありがとう!!
解決
ああ、以前ははっきりと考えていませんでした。セッターはケースプロパティ自体のプライベートですが、主題などのケースのプロパティはまだ公開されています。
ケースのプロパティプライベートセットを作成すると、コントローラーがケースがその下から変更されることからのみ保護されます。
ごめん!!
所属していません StackOverflow