Как создать тестовый класс Apex для моего класса Apex - PullRequest
0 голосов
/ 27 февраля 2019

Это мой первый апекс-класс, и я не знаю, как реализовать правильный тестовый класс.Моя цель - добиться охвата тестами 75%.

Я обновился на основе комментариев, но мне удалось достичь только 70%.У меня нет других идей, как это улучшить.

Вот что я сделал:

Класс Apex:

 public with sharing class AccountController {

@AuraEnabled
public static List<Account> findAll() {

    User userDetails =[SELECT Id, Name, Email, Profile.Name, UserRole.Name FROM User
        where Id=:userinfo.getUserId() ];

    // Theme4t is theme that is used by mobille app for  android or iphone 
    if(((userDetails.UserRole.Name).equals('yon')|| (userDetails.UserRole.Name).equals('bon')|| (userDetails.UserRole.Name).contains('non')
        || (userDetails.UserRole.Name).contains('go')) && UserInfo.getUiTheme() != 'Theme4t'){
       return [SELECT id, name, AccountStatus__c, ShippingLatitude, ShippingLongitude, ShippingCity
        FROM Account
        WHERE ShippingLatitude != NULL AND ShippingLongitude != NULL 
        LIMIT:22000];

    }else {
       return [SELECT id, name, AccountStatus__c, ShippingLatitude, ShippingLongitude, ShippingCity
        FROM Account
        WHERE OwnerId =: UserInfo.getUserId() AND ShippingLatitude != NULL AND ShippingLongitude != NULL 
        LIMIT:5000]; 

    }
}

Класс тестирования Apex:

 @isTest 
public class AccountControllerTest 
{
static testMethod void testMethod1() 
            {
                           Account acc = new Account();
                           acc.Name='Test';

                           insert acc;
                           User userDetails =[SELECT Id, Name, Email, Profile.Name, UserRole.Name FROM User
        where Id=:userinfo.getUserId() ];


                          List<Account> lstAcc = AccountController.findAll();
                          UserRole ur =new UserRole();


                         userDetails.UserRoleId=[select Id from UserRole where Name='yon'].Id;
               System.runAs(userDetails){
                          List<Account> lstAcc1 = AccountController.findAll();  

               }

               userDetails.UserRoleId=[select Id from UserRole where Name='bon'].Id;
               System.runAs(userDetails){
                          List<Account> lstAcc2 = AccountController.findAll();  

               }

                userDetails.UserRoleId=[select Id from UserRole where Name='non'].Id;
               System.runAs(userDetails){
                          List<Account> lstAcc3 = AccountController.findAll();  

               }

               userDetails.UserRoleId=[select Id from UserRole where Name='go'].Id;
               System.runAs(userDetails){
               List<Account> lstAcc4 = AccountController.findAll();  

               }                       
}

1 Ответ

0 голосов
/ 27 февраля 2019

Пожалуйста, заполните нижеприведенный раздел, чтобы ознакомиться с модульным тестом в Salesforce.https://trailhead.salesforce.com/en/content/learn/modules/apex_testing/apex_testing_intro

А также, когда вы пытаетесь создать пользователя после добавления учетной записи, он выдаст ошибку смешанного DML.вам нужно использовать метод system.runAs ().следуйте приведенному ниже URL для использования метода.

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_testing_tools_runas.htm

Дайте мне знать, если вам все еще нужна помощь по этому вопросу.

Вот код для вашего классаи тестовый класс.Пожалуйста, следуйте рекомендациям http://blog.shivanathd.com/2013/11/Best-Practices-Test-Class-in-Salesforce.html На этот раз я предоставляю вам код, чтобы понять, как создать тестовый класс, но в следующий раз, пожалуйста, следуйте инструкциям и документам, которыми я поделился.

public with sharing class AccountController { 
            //using a test visible variable for setting the ui theme check.
            @TestVisible static Boolean isTheme4t = UserInfo.getUiThemeDisplayed() == 'Theme4t';
            @AuraEnabled
            public static List<Account> findAll() {

                User userDetails =[SELECT Id, Name, Email, Profile.Name, UserRole.Name FROM User  where Id=:userinfo.getUserId()];

                // Theme4t is theme that is used by mobille app for  android or iphone 
                if(((userDetails.UserRole.Name).equals('yon')|| (userDetails.UserRole.Name).equals('bon')|| (userDetails.UserRole.Name).contains('non') || (userDetails.UserRole.Name).contains('go')) && !isTheme4t){
                    return [SELECT id, name, AccountStatus__c, ShippingLatitude, ShippingLongitude, ShippingCity FROM Account WHERE ShippingLatitude != NULL AND ShippingLongitude != NULL LIMIT 22000];

                }else {
                    return [SELECT id, name, AccountStatus__c, ShippingLatitude, ShippingLongitude, ShippingCity FROM Account WHERE OwnerId =: UserInfo.getUserId() AND ShippingLatitude != NULL AND ShippingLongitude != NULL LIMIT 5000]; 
                }
            }
 }




    @isTest 
    public class AccountControllerTest 
    {
        //Use setup data method to create data and query it in testmethod 
        @testSetup static void setup() {
            UserRole r = new UserRole(DeveloperName = 'yon', Name = 'yon');
            insert r;
            User u = new User(
                ProfileId = [SELECT Id FROM Profile WHERE Name = 'System Administrator'].Id,
                LastName = 'last',
                Email = 'puser000@amamama.com',
                Username = 'puser000@amamama.com' + System.currentTimeMillis(),
                CompanyName = 'TEST',
                Title = 'title',
                Alias = 'alias',
                TimeZoneSidKey = 'America/Los_Angeles',
                EmailEncodingKey = 'UTF-8',
                LanguageLocaleKey = 'en_US',
                LocaleSidKey = 'en_US',
                UserRoleId = r.Id
            );
            insert u;
            System.runAs(u){
                Account acc = new Account();
                acc.Name = 'Test Account';
                acc.ShippingLatitude = 75.46;
                acc.ShippingLongitude = 45.46;
                acc.AccountStatus__c = 'test';
                insert acc;
            }
        }

        static testMethod void testMethod1(){
            user u = [select Id from User where email = 'puser000@amamama.com' limit 1];
            system.runAs(u){
                Test.startTest();
                List<Account> acc = [select Id,AccountStatus__c,ShippingLatitude,ShippingLongitude from Account where Name = 'Test Account'];
                List<Account> lstAcc4 = AccountController.findAll();  
                system.assert(lstAcc4.size()>0);
                Test.stopTest();

            }
        }
        static testMethod void testMethod2(){
            user u = [select Id from User where email = 'puser000@amamama.com' limit 1];
            system.runAs(u){
                AccountController.isTheme4t = true;
                Test.startTest();
                List<Account> acc = [select Id,AccountStatus__c,ShippingLatitude,ShippingLongitude from Account where Name = 'Test Account'];
                List<Account> lstAcc4 = AccountController.findAll();  
                system.assert(lstAcc4.size()>0);
                Test.stopTest();

            }
        }
    }
...