Pruebas de contratos que tienen parámetros de construcción

¿Cómo pruebo un contrato que tiene parámetros de construcción? Por ejemplo, ¿qué pasaría si hubiera modificado ligeramente el contrato de ejemplo de metacoin para incluir uninitial_balance

contract MetaCoin {
  mapping (address => uint) balances;

  function MetaCoin(uint initial_balance) {
    balances[tx.origin] = initial_balance;
  }
  ...

¿Cómo modifico el ejemplo TestMetacoin.sol?

import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/MetaCoin.sol";

contract TestMetacoin {
  function testInitialBalanceUsingDeployedContract() {
    MetaCoin meta = MetaCoin(DeployedAddresses.MetaCoin());

    uint expected = 10000;

    Assert.equal(meta.getBalance(tx.origin), expected, "Owner should have 10000 MetaCoin initially");
  }
  ...

AFAIK, el truffle testcorredor implementa los contratos y Metacoin(DeployedAddresses.Metacoin())obtiene el contrato implementado para probar. Pero no veo ninguna forma de pasar en el initial_balancepara probarlo.

Respuestas (1)

Hay dos soluciones.

Primera solución : cambie su archivo de migraciones y agregue el segundo parámetro aquí:

deployer.deploy(Contract, initial_balance)

Segunda solución : simplemente implemente un nuevo contrato dentro de su prueba:

contract TestMetacoin {
  function testInitialBalanceUsingDeployedContract() {
    MetaCoin meta = new MetaCoin(10000);

    uint expected = 10000;

    Assert.equal(meta.getBalance(tx.origin), expected, "Owner should have 10000 MetaCoin initially");
}
¡Ah! Eso tiene mucho sentido. No me di cuenta de que el corredor de pruebas de trufas usa las migraciones para implementar los contratos.