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");
}
}
Может ли кто-нибудь объяснить, как экземпляр контракта создается из адреса в трюфельной структуре? Принятие = Принятие (DeployedAddresses.Adoption());
Тестовый контракт TestAdoption
развертывается автоматически тестовой средой Truffle, ваш контракт Adoption
развертывается в сценариях миграции.
Эта линия
Adoption adoption = Adoption(DeployedAddresses.Adoption());
не создает новый контракт, а вместо этого присваивает adoption
переменной адрес, развернутый скриптами миграции (развернутые адреса хранятся внутри контракта DeployedAddresses
)
Для получения дополнительной информации о Truffle Solidity Test обратитесь к их документации .
Сантош Кумар
Исмаэль
DeployedAddresses.Adoption()
возвращает значение типаaddress
, в Solidity вы не можете напрямую присвоить его переменной типаAdoption
, которую вы должны явно преобразовать. Это обязательно во избежание ошибок, таких как компиляция, делающая ошибочное преобразование.