¿Cómo se inicializa el contrato en pruebas de trufa en solidez?

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");
    }

}

¿Alguien puede explicar cómo se crea la instancia del contrato a partir de la dirección en el marco de trufa? adopción adopción = adopción (direcciones implementadas. adopción ());

Respuestas (1)

El TestAdoptionmarco de prueba de Truffle implementa automáticamente el contrato de prueba, su contrato Adoptionse implementa en los scripts de migración.

Esta línea

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

no crea un nuevo contrato sino que asigna a la adoptionvariable la dirección implementada por los scripts de migración (las direcciones implementadas se almacenan dentro del DeployedAddressescontrato)

Para obtener más información sobre la prueba de solidez de la trufa, consulte su documentación .

Gracias por la explicación. Entiendo la parte en la que las direcciones implementadas se almacenan en DepoyledAddresses.sol y se recuperan mediante DepoyledAddresses.<nombre del contrato>(). ¿Por qué la dirección de un contrato implementado está envuelta en el nombre de contrato "Adopción (dirección)"? ¿Cuál es el funcionamiento interno de esta declaración? Es lo que me cuesta entender.
La función DeployedAddresses.Adoption()devuelve un valor de tipo address, en solidez no puede asignarlo directamente a una variable de tipo Adoption, debe convertirlo explícitamente. Esto es obligatorio en solidez para evitar errores, como el compilar haciendo una conversión errónea.