2011-09-13 4 views
2

현재 Apex (Force.com IDE 사용)를 배우고 있으며 사용자 지정 컨트롤러 테스트를 작성할 때 몇 가지 문제가 있습니다.Apex 오류 : "저장 오류 : 메서드가 존재하지 않거나 부정확 한 서명"

public with sharing class CustomController { 
    private List<TestObject__c> objects; 

    public CustomController() { 
     objects = [SELECT id, name FROM TestObject__c]; 
    } 

    public List<TestObject__c> getObjects() { 
     return objects; 
    } 
} 

및 테스트 클래스는 다음과 같습니다 :

Save error: Method does not exist or incorrect signature: [CustomController].getObjects()

을 다음 objects = controller.getObjects(); 줄에

@isTest 
private class ControllerTest { 
    static testMethod void customControllerTest() { 
     CustomController controller = new CustomController(); 

     System.assertNotEquals(controller, null); 

     List<TestObject__c> objects; 

     objects = controller.getObjects(); 

     System.assertNotEquals(objects, null);  
    } 
} 

내가라는 오류가있어 다음과 같이

컨트롤러 클래스입니다

누구나 왜이 오류가 발생했는지 알 수 있습니까?

+0

첫 번째 수업이 확실히 저장 되었습니까? 이것에서 뚜렷한 것을 볼 수 없습니다. 일반적으로 메시지를 보았을 때 나는 바보 같은 짓을했기 때문에 그것을 볼 수 있습니다. 예를 들어 정적 메서드를 호출하려했지만 실제로 정적 키워드를 사용하지 않았습니다! –

+0

클래스를 붙여 익명으로 실행 (하지만 TestObject__c 대신 Contact 사용) 한 다음 새로운 인스턴스에서 getObjects를 호출하면 오류없이 작동합니다. –

+0

코드에서 다른 오류가 발생하지 않았습니다. 파일은 로컬에 저장되었지만 서버에 저장되지 않았습니다 (테스트가 통과하지 않았기 때문일 수 있음). 또한 Execute Anonymous에서 시도 할 때 정확히 동일한 메시지를받습니다. – Apexer

답변

3

좋은 속기 :

public List<TestObject__c> objects {get; private set;} 

그것은 당신을 위해 게터/세터를 생성하고 IMO 청소기 보인다. 현재 문제에 관해서는 그렇습니다. 코드를 프로덕션 환경에 직접 저장하는 것이 어렵습니다. 특히 테스트 클래스를 별도의 파일로 저장하는 것이 좋습니다.

sandbox/dev org에서이 작업을 수행하는 것이 가장 좋습니다. 을 프로덕션 환경에 배포합니다 (서버에 배포 - Force.com IDE). 그러나 프로덕션 환경에 직접 저장해야한다면 테스트 메소드와 클래스를 결합해야합니다. 그러나 장기적으로, 전용 테스트 클래스 꼭대기에 @test를 갖는 것은 갈 길이 멀다. 이 방법으로 귀중한 자원을 소비하지 않을 것입니다.

+0

그래, 나는 곧 그걸로 싫증이 나서 방금 설명했던 걸 했어. – Apexer

관련 문제