Szukaj…


Potwierdź metody

static TestMethod void DmlTest() {
    List<Contact> allContacts = [SELECT Id FROM Contact];
    System.assert(allContacts.isEmpty());

    Contact testContact = new Contact(FirstName = 'John', LastName = 'Doe');
    insert testContact;
    allContacts = [SELECT Id FROM Contact];
    System.assertNotEquals(0, allContacts.size(), 'Optional message in case of failure');
    
    delete allContacts;
    allContacts = [SELECT Id FROM Contact];
    System.assertEquals(0, allContacts.size());
}

Podstawowa klasa testu

Ta klasa testowa przetestuje IsBlank(...) SomeClass . Poniżej znajduje się przykład SomeClass . Ta klasa ma tylko jedną podstawową metodę static , ale nie będzie można wdrożyć jej w instancji produkcyjnej do użytku, dopóki nie zostanie osiągnięty próg pokrycia kodu.

public class SomeClass {

    public static Boolean IsBlank(String someData) {
        if (someData == null) {
            return true;
        } else if (someData == '') {
            return true; 
        } else {
            return false;
        }
    }

}

Jak widać, ta metoda jest po prostu instrukcją if z trzema gałęziami. Aby napisać skuteczną klasę testową, musimy zakryć każdy oddział kodem i użyć System.assertEquals(...) , aby sprawdzić, czy właściwe dane zostały otrzymane z IsBlank(...) .

@isTest 
public class SomeClass_test {

    @isTest 
    public static void SomeClass_IsBlank_test() {

        String testData;

        // SomeClass.IsBlank() returns true for Null values
        System.assertEquals(true, SomeClass.IsBlank(testData)); 

        testData = '';
        
        // SomeClass.IsBlank() returns true for empty strings
        System.assertEquals(true, SomeClass.IsBlank(testData)); 

        testData = 'someData';

        // SomeClass.IsBlank() returns false when testData is neither
        // an empty string nor Null
        System.assertEquals(false, SomeClass.IsBlank(testData)); 

    }

}

Korzystanie z testSetup

Możesz użyć metody z adnotacją @testSetup aby napisać kod, który zostanie wykonany przed każdym uruchomieniem testowym:

public class AccountService {
  public static Account fetchAccount() {
    return [ SELECT Id, Name FROM Account LIMIT 1 ];
  }
}
@isTest
public class AccountServiceTest {
  private static final String TEST_ACCOUNT_NAME = 'My Test Account';

  @testSetup
  public static void setUpAccountData() {
    Account a = new Account(Name = TEST_ACCOUNT_NAME);
  }

  @isTest
  public static void testFetchAccount() {
    Account a = AccountService.fetchAccount();
    System.assertNotEquals(null, a, 'Account should not be null');
    System.assertEquals(TEST_ACCOUNT_NAME, a.Name, 'Account name should be correct');
  }
}

Korzystanie z bloków statycznych

Chociaż można użyć adnotacji @testSetup aby wyznaczyć metodę, która ma zostać uruchomiona przed wykonaniem testów, metoda ta zwykle zostanie uruchomiona tylko raz. Jeśli potrzebujesz kodu do uruchomienia przed każdym testem, możesz użyć bloku static :

@isTest
public class MyTest {
  static {
    // code here will be run before each test is executed
  }
}

Metody asercji

System.assert może być użyty do sprawdzenia, czy wyrażenie logiczne ma wartość true:

System.assert(Service.isActive());
System.assert(!Service.getItems().isEmpty(), 'items should not be empty');

System.assertEquals i System.assertNotEquals mogą służyć do sprawdzania równości dwóch wartości. Oczekiwana wartość jest przekazywana jako pierwszy parametr, a wartość testowana jest przekazywana jako drugi.

System.assertEquals(4, Service.getItems().size());
System.assertNotEquals(null, Service.getItems());

// failure messages are optional:
System.assertEquals(true, Service.doWork(), 'doWork should return true');
System.assertNotEquals(null, Service.doWork(), 'doWork should not be null');


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow