2016-08-02 4 views
0

새내기 ... 여기에 ... 인내심에 감사드립니다. 나는 시작하는 경우 확실하지 않은 다음 컨트롤러에 대한 테스트 클래스를 작성에 관심이 있어요,하지만 :Apex 테스트 클래스

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 % 가까울수록 좋아집니다. 그러나 (!)이라면, 여러분의 방법이 무엇을하고 있는지를 주장 할 때 항상 무엇인가를 포함해야합니다. 가 ref1이 upsertion이를 성공하면 당신은 (기대 참조가 wher 당신이 당신의 테스트 클래스에서 System.assertEquals(ref1, ref2);를 포함 할 수 있습니다, 그렇게함으로써

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

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

: 귀하의 경우 예를 들어,이 같은 방법 자동 저장()을 바꿀 것 test_emp 페이지 참조가 될 것입니다.) ref2는 실제로 테스트에서 얻은 참조 일 것입니다. 두 번째로 테스트에서 static 메서드를 사용하고 있습니다. 이 방법으로 작성한 내용은 항상 Test.startTest(); 호출에서 실행됩니다.

희망이 도움이됩니다. :) 건배, G.

관련 문제