Assert.equal 在 运行 Truffle 测试时不可用

Assert.equal is not available when running Truffle Tests

我有一个简单的合约,我正在尝试在 Truffle 中为该合约编写 Solidity 测试。以下是代码示例 -

File: dummycontract.sol

pragma solidity ^0.4.17;

contract DummyContract {

    uint[] public elements;

    function addElement(uint element) public {
        elements.push(element);
    }

    function getNumberOfElements() public view returns(uint) {
        uint numElements = uint(elements.length);
        return numElements;
    }

}

和测试文件 -

pragma solidity ^0.4.17;

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

contract TestZombieFactory {

    function testInitialState() public {
        DummyContract dummyContract = DummyContract(DeployedAddresses.DummyContract());
        uint numberOfElements = dummyContract.getNumberOfElements();
        Assert.equal(numberOfElements == 0);
    }

}

在 运行 truffle test 上,我收到以下错误 -

TypeError: Member "equal" is not available in type(library Assert) outside of storage.
        Assert.equal(numberOfElements == 0);

有人可以给我解释一下吗?

您对 Assert.equal() 的用法不正确。它需要两个值并在函数内进行比较。函数签名是

function equal(uint A, uint B, string message) constant returns (bool result)

将您的测试合同更改为以下内容,它将起作用。

pragma solidity ^0.4.17;

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

contract TestZombieFactory {
    function testInitialState() public {
        DummyContract dummyContract = DummyContract(DeployedAddresses.DummyContract());
        uint numberOfElements = dummyContract.getNumberOfElements();
        Assert.equal(numberOfElements, 0, "Number of elements should be 0");
    }
}

你应该替换

Assert.equal(numberOfElements == 0);

Assert.equal(numberOfElements,0);