2012-03-21 13 views
10

ho creato un compito nella mia org con oggetto "Email Task"Apex unit test non vede dati

ho scritto codice apice come

public class TaskInfoDAOClass 
{ 
    public static List<Task> queryTaskInfo() 
    { 
integer count = [SELECT count() FROM Task]; 
System.debug('Row Count :'+ count); 
List<Task> tasks= [SELECT Task.Id,Task.AccountId,Task.Status,Task.Account.Name FROM Task where Task.Subject='Email Task']; 
    return tasks;  
    } 
} 

Ho creato una classe di test per testare il codice all'apice come

@isTest 
public class TestTaskInfoDAO 
{ 
public static testMethod void testQueryTaskInfo() 
{ 
List<Task> tasks = TaskInfoDAOClass.queryTaskInfo(); 
System.debug ('this is a debug statement'); 

for (Task t : tasks) 
{ 
System.debug ('Status '+ t.Status); 
    System.debug ('Account name '+ t.Account.Name); 

} 
} 
} 

quando eseguo questo test, ottengo 0 come numero di ROW. per favore fai riferimento al file apex.log

24.0 APEX_CODE,FINE;APEX_PROFILING,FINE;DB,INFO;VALIDATION,INFO;WORKFLOW,FINEST 
23:48:30.100 (100678000)|EXECUTION_STARTED 
23:48:30.100 (100722000)|CODE_UNIT_STARTED|[EXTERNAL]|01p90000000k5Qw|TestTaskInfoDAO.testQueryTaskInfo 
23:48:30.101 (101272000)|METHOD_ENTRY|[2]|01p90000000k5Qw|TestTaskInfoDAO.TestTaskInfoDAO() 
23:48:30.101 (101414000)|METHOD_EXIT|[2]|TestTaskInfoDAO 
23:48:30.101 (101494000)|METHOD_ENTRY|[1]|01p90000000k5Qr|TaskInfoDAOClass.TaskInfoDAOClass() 
23:48:30.101 (101513000)|METHOD_EXIT|[1]|TaskInfoDAOClass 
23:48:30.101 (101782000)|METHOD_ENTRY|[6]|01p90000000k5Qr|TaskInfoDAOClass.queryTaskInfo() 
23:48:30.102 (102176000)|SOQL_EXECUTE_BEGIN|[5]|Aggregations:0|select count() from Task 
23:48:30.106 (106893000)|SOQL_EXECUTE_END|[5]|Rows:0 
23:48:30.106 (106965000)|SYSTEM_METHOD_ENTRY|[6]|String.valueOf(Object) 
23:48:30.107 (107012000)|SYSTEM_METHOD_EXIT|[6]|String.valueOf(Object) 
23:48:30.107 (107032000)|SYSTEM_METHOD_ENTRY|[6]|System.debug(ANY) 
23:48:30.107 (107040000)|USER_DEBUG|[6]|DEBUG|Row Count :0 
23:48:30.107 (107047000)|SYSTEM_METHOD_EXIT|[6]|System.debug(ANY) 
23:48:30.107 (107385000)|SOQL_EXECUTE_BEGIN|[9]|Aggregations:0|select Task.Id, Task.AccountId, Task.Status, Task.Account.Name from Task where Task.Subject = 'Email Task' 
23:48:30.109 (109847000)|SOQL_EXECUTE_END|[9]|Rows:0 
23:48:30.109 (109930000)|METHOD_EXIT|[6]|01p90000000k5Qr|TaskInfoDAOClass.queryTaskInfo() 
23:48:30.110 (110074000)|USER_DEBUG|[7]|DEBUG|this is a debug statement 
23:48:30.789 (111361000)|CUMULATIVE_LIMIT_USAGE 
23:48:30.789|LIMIT_USAGE_FOR_NS|(default)| 
    Number of SOQL queries: 2 out of 100 
    Number of query rows: 0 out of 50000 
    Number of SOSL queries: 0 out of 20 
    Number of DML statements: 0 out of 150 
    Number of DML rows: 0 out of 10000 
    Number of script statements: 7 out of 200000 
    Maximum heap size: 0 out of 6000000 
    Number of callouts: 0 out of 10 
    Number of Email Invocations: 0 out of 10 
    Number of fields describes: 0 out of 100 
    Number of record type describes: 0 out of 100 
    Number of child relationships describes: 0 out of 100 
    Number of picklist describes: 0 out of 100 
    Number of future calls: 0 out of 10 

23:48:30.789|TOTAL_EMAIL_RECIPIENTS_QUEUED|0 
23:48:30.789|STATIC_VARIABLE_LIST| 
    double:MAX_VALUE:0 
    long:serialVersionUID:0 
    int:MAX_EXPONENT:0 
    int:MIN_EXPONENT:0 
    Boolean:TRUE:0 
    long:serialVersionUID:0 
    double:POSITIVE_INFINITY:0 
    double:MIN_NORMAL:0 
    double:MIN_VALUE:0 
    Boolean:FALSE:0 
    int:SIZE:0 
    char[]:DigitOnes:0 
    int[]:sizeTable:0 
    char[]:DigitTens:0 
    double:NaN:0 
    int:MAX_VALUE:0 
    char[]:digits:0 
    long:serialVersionUID:0 
    double:NEGATIVE_INFINITY:0 
    int:MIN_VALUE:0 
    int:SIZE:0 

23:48:30.789|CUMULATIVE_LIMIT_USAGE_END 

23:48:30.111 (111444000)|CODE_UNIT_FINISHED|TestTaskInfoDAO.testQueryTaskInfo 
23:48:30.111 (111452000)|EXECUTION_FINISHED 
23:48:30.999|CUMULATIVE_PROFILING_BEGIN 
23:48:30.999|CUMULATIVE_PROFILING|SOQL operations| 
    Class.TaskInfoDAOClass.queryTaskInfo: line 5, column 1: [SELECT count() FROM Task]: executed 1 time in 5 ms 
    Class.TaskInfoDAOClass.queryTaskInfo: line 9, column 1: [SELECT Task.Id,Task.AccountId,Task.Status,Task.Account.Name FROM Task where Task.Subject='Email Task']: executed 1 time in 3 ms 

23:48:30.999|CUMULATIVE_PROFILING|No profiling information for SOSL operations 
23:48:30.999|CUMULATIVE_PROFILING|No profiling information for DML operations 
23:48:30.999|CUMULATIVE_PROFILING|method invocations| 
    External entry point: public static testMethod void testQueryTaskInfo(): executed 1 time in 11 ms 
    Class.TestTaskInfoDAO.testQueryTaskInfo: line 6, column 1: public static LIST<Task> queryTaskInfo(): executed 1 time in 8 ms 
    Class.TestTaskInfoDAO.testQueryTaskInfo: line 9, column 1: global object iterator(): executed 2 times in 1 ms 
    Class.TaskInfoDAOClass.queryTaskInfo: line 6, column 1: global public static String valueOf(Object): executed 2 times in 0 ms 
    Class.TestTaskInfoDAO.testQueryTaskInfo: line 7, column 1: global public static void debug(ANY): executed 1 time in 0 ms 

23:48:30.999|CUMULATIVE_PROFILING_END 

Perché sto ricevendo 0 CONTA DI CANALI?

risposta

20

Questo perché, a partire dalla primavera 2012, i dati non saranno nell'organizzazione durante il test e devono essere ricreati dai metodi di test a meno che non si utilizzi l'annotazione IsTest (SeeAllData = true). Dal manuale Apex:

A partire con il codice Apex salvato utilizzando Salesforce API versione 24.0 e tardi, metodi di prova non hanno accesso di default per i dati pre-esistenti nell'organizzazione, come oggetti standard, personalizzato oggetti e dati di impostazioni personalizzate e possono accedere solo ai dati che creano.

È necessario creare dati di test per ciascun test. È possibile disabilitare questa limitazione annotando la classe di test o il metodo di prova con l'annotazione IsTest (SeeAllData = true) . Per ulteriori informazioni, vedere IsTest (SeeAllData = true) Annotazione.

7

È necessario inserire un'attività con l'oggetto "Attività di posta elettronica" all'inizio del metodo di test. A partire dall'ultima versione, i metodi di test non possono accedere ai dati già presenti nel sistema, il che garantisce che i test siano notevolmente più coerenti con la copertura tra le organizzazioni. Significa anche che non dobbiamo più aggiungere clausole di test specifiche al codice per garantire che selezionino i record corretti quando si esegue una query su un set di dati di grandi dimensioni!

+3

Definitivamente. Questo cambiamento farà sì che alcuni si sentano frustrati, ma alla fine sarà meglio per tutti. Mi piace creare classi di supporto che testano i metodi di chiamata che generano dati di test. È ancora meglio ora che non ci sarà il potenziale per i dati reali casuali di sporcare ciò che ci aspettiamo che i risultati siano basati sui dati di test che inseriamo. Se, ad esempio, inserisco un record "Task email", saprò che ci sarà solo uno nel test, quindi count() sarà == 1, non potenzialmente> 1. – Adam