[JAVA] Lassen Sie uns den Unit-Test wie das Atmen heilen (Apex Trigger Edition)

Vor

Saleforce hat die Konvention, dass Klassen nicht ohne 75% oder mehr Abdeckung bereitgestellt werden können.

Tolle Konvention. Aber implementieren Sie Unit-Tests, "um durch die Abdeckung zu kommen" Es gibt viele Fälle, in denen verschiedene Kontraindikationen begangen wurden.

"Wofür ist der Komponententest? Wofür gelten die Regeln?"

Eine solche Szene zu entdecken, ist eine Reihe von Heilmethoden.

Es ist peinlich für diejenigen, die lernen, wie man TDD- und Unit-Tests richtig schreibt. Ich beschloss, darüber zu schreiben, wie der Unit-Test mit den folgenden Wünschen geheilt werden kann.

Zielausführungsklasse

Angenommen, Sie haben eine Klasse wie diese, die nach der Aktualisierung im Trigger eines Objekts namens Dto1__c beginnt.

public with sharing class DtoHandler{
    public static void execute(Dto__c dto){
        if(dto.a == 'x'){
            //Verarbeitung zum Einfügen in ein dto2-Objekt
           insert new Dto2();
        }
    }
}

Vor der Heilung

Es war so.

@isTest static void testExecute(){
    Dto__c dto = new Dto(a='x', b='y');
    insert dto;
    update dto:
}

Oh, oh. Die Abdeckung steigt, weil sie sich mit einem Auslöser so bewegt.

trigger DtoTrigger on Dto__c (after update) {
    DtoHandler.execute(Trigger.New);
    munyamunya();
}

Nun, die Tatsache, dass der Komponententest nicht fehlschlägt, bedeutet, dass der Trigger ohne Fehler ausgeführt wird. Es scheint, dass ich das garantieren kann. (Sicherheit?) Dies ist ein Triggertest. Verwenden wir also testDtoTrigger ().

Wenn testExecute () der aktuelle Komponententest ist, wird auch munyamunya () ausgeführt? Ich meine, was wissen Sie, wenn Sie nur die Daten aktualisieren? Das ist es.

Nach der Heilung


/*
 *DtoTrigger-Testmethode
 */
@isTest static void testDtoTrigger(){
    Test.startTest();
    Dto__c dto = new Dto(a = 'x');
    insert dto;
    //DtoTrigger.Trigger-Update ausführen
    //Erwarten: Beim Ausführen des Updates tritt kein Fehler auf
    dto.a = 'y';
    update dto;
    Test.stopTest();
}
/*
 *Testmethode der Ausführungsmethode
 */
@isTest static void testExecute(){
    Test.startTest();

    //zur Generation
    Dto__c dto = new Dto(a='y');

    //a = 'x'Andernfalls wird der Datensatz nicht eingefügt
    DtoHandler.execute(dto);
    Dto2__c dto2_1 = [SELECT Id FROM Dto2__c];
    System.assertEquals(0,dto2_1.size());

    //a = 'x'Im Fall von wird der dto2-Datensatz eingefügt
    dto.a = 'y';
    DtoHandler.execute(dto);
    Dto2__c dto2_2 = [SELECT Id FROM Dto2__c];
    System.assertEquals(1,dto2_2.size());

    Test.stopTet();
}

Wie man heilt

Tweet

Leute, die nicht an TDD gewöhnt sind oder TDD machen wollen, aber die Geschwindigkeit ist nicht gut genug. .. Wer sagt Wenn Sie den unglücklichen Komponententest weiterhin so reparieren, Ich denke, es ist einfacher zu verstehen, wenn Sie aus einem Unit-Test schreiben. Da es gute Regeln gibt, sollten wir sie gut nutzen.

Recommended Posts

Lassen Sie uns den Unit-Test wie das Atmen heilen (Apex Trigger Edition)
Lassen Sie uns das Spock-Framework einführen und Unit-Tests wie Testfahrten schreiben
[Schienen] Machen wir einen Unit-Test mit Rspec!
Was sind die Nebenwirkungen? ~ Lassen Sie uns einfach einen kleinen Unit-Test durchführen ~