Wie wird der Vertrag bei Trüffeltests in Solidität initialisiert?

pragma solidity ^0.4.17;

import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/Adoption.sol";
contract TestAdoption {

    **Adoption adoption = Adoption(DeployedAddresses.Adoption());**

    function testGetAdoptorAddressByPetId() public{
        address expected = this;
        address[16] memory adoptors = adoption.getAdoptors();
        Assert.equal(adoptors[8], expected, "Owner of pet Id 8 should be recorded");
    }

}

Kann jemand erklären, wie die Vertragsinstanz aus der Adresse im Truffle Framework erstellt wird? Adoptionsadoption = Adoption(DeployedAddresses.Adoption());

Antworten (1)

Der Testvertrag TestAdoptionwird automatisch vom Truffle-Testframework bereitgestellt, Ihr Vertrag Adoptionwird in den Migrationsskripten bereitgestellt.

Diese Linie

Adoption adoption = Adoption(DeployedAddresses.Adoption());

erstellt keinen neuen Vertrag, sondern weist der adoptionVariablen stattdessen die von den Migrationsskripten bereitgestellte Adresse zu (die bereitgestellten Adressen werden im DeployedAddressesVertrag gespeichert) .

Weitere Informationen zum Trüffel-Festigkeitstest finden Sie in der Dokumentation .

Danke für die Erklärung. Ich verstehe den Teil, in dem bereitgestellte Adressen in DepoyledAddresses.sol gespeichert und mit DepoyledAddresses.<Vertragsname>() abgerufen werden. Warum wird die Adresse eines bereitgestellten Vertrags in den Vertragsnamen „Adoption(Adresse)“ eingeschlossen? Was ist die interne Funktionsweise dieser Aussage. Was ich nur schwer nachvollziehen kann.
Die Funktion DeployedAddresses.Adoption()gibt einen Wert vom Typ zurück address, in Solidität können Sie ihn nicht direkt einer Variablen vom Typ zuweisen, AdoptionSie müssen ihn explizit konvertieren. Dies ist zwingend erforderlich, um Fehler zu vermeiden, wie z. B. beim Kompilieren eine fehlerhafte Konvertierung.