2016-08-02 2 views
0

новичок здесь ... спасибо за ваше терпение. Я заинтересован в написании тестового класса для следующего контроллера, но не уверен, с чего начать:Apex Test Class

public class savecontroller 
{ 
    private final Emp__c emps; 
    public savecontroller(ApexPages.StandardController controller) 
    { 
     this.emps= (Emp__c)controller.getRecord(); 
    } 
    public void autosave() 
    { 
     upsert emps; 
    } 
} 

Спасибо

ответ

0

Ваш код немного странно ... Из этой части:

public savecontroller(ApexPages.StandardController controller) 

похоже, что ваш контроллер не является «контроллером», а скорее расширением стандартного контроллера для объекта Emp__c. Я знаю, это ничего не влияет на ваш пост (кроме, может быть, семантики), НО (!) это влияет на то, как вы пишете свой тестовый класс. Поскольку это расширение, тестовый класс будет выглядеть примерно так:

@isTest 
public class saveconttroller_test { 

    public static Emp__c test_emp; // declaration 

    static { 
     test_emp = new Emp__c(); 
     insert test_emp; //since you have upsert you can leave this out 
    } 

    static testMethod void testsavecotroller() { 

     Test.startTest(); 
     //in the next two lines we contruct standard controller and the extension 
     ApexPages.StandardController sc = new ApexPages.StandardController(test_emp); 
     savecontroller ext = new savecontroller(sc); 
     ext.autosave(); 
     Test.stopTest(); 
    } 
} 

Теперь, позвольте мне отметить несколько вещей ... первый, как я уверен, вы знаете, тест должен охватывать как можно больше коды, как возможное. SF требует 75%, но чем ближе вы доберетесь до 100%, тем лучше. Но (!), вы всегда должны включать что-то, чтобы утверждать, если ваш метод делает то, что он должен делать. Например, в вашем случае, я бы изменить метод автосохранение(), как это:

public PageReference autosave() 
    { 
     try { 
      upsert emps; 
      return new ApexPages.StandardController(test_emp).view(); 

     } catch(Exception e) { 
      return null;   
     } 
    } 

Поступая таким образом, вы можете включить System.assertEquals(ref1, ref2); в тестовом классе, порог ref1 является ссылкой можно было бы ожидать (если upsertion был успешным в этом будет ссылкой на страницу test_emp), а ref2 будет ссылкой, которую вы действительно получите от теста. Во-вторых, использование метода static в тесте. Все, что вы пишете в этом методе, всегда будет выполняться по вызову Test.startTest();.

Надеюсь, это вам поможет! :) Cheers, G.

Смежные вопросы