Testen von Verträgen mit Konstruktionsparametern

Wie teste ich einen Vertrag mit Konstruktionsparametern? Was wäre zum Beispiel, wenn ich den Metacoin-Beispielvertrag leicht modifiziert hätte , um ein einzuschließeninitial_balance

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

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

Wie ändere ich das Beispiel 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, der truffle testRunner stellt die Verträge bereit und Metacoin(DeployedAddresses.Metacoin())erhält den bereitgestellten Vertrag zum Testen. Aber ich sehe keine Möglichkeit, es initial_balancezu testen.

Antworten (1)

Es gibt zwei Lösungen.

Erste Lösung : Ändern Sie Ihre Migrationsdatei und fügen Sie hier einen zweiten Parameter hinzu:

deployer.deploy(Contract, initial_balance)

Zweite Lösung : Stellen Sie einfach einen neuen Vertrag in Ihrem Test bereit:

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");
}
Aha! Das macht sehr viel Sinn. Mir war nicht klar, dass der Trüffel-Testläufer die Migrationen verwendet, um die Verträge bereitzustellen.