귀하의 코드는이 부분에서 이상한 조금 ... :
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.