Erstellen Sie Komponententests, um den von einer Solidity-Funktion zurückgegebenen string[] zu validieren

Ich habe eine Solidity-Funktion wie die unten,

pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;

contract Funding {
    function sum(uint input1, uint input2) public returns (uint) {
        return input1 + input2;
    }

    struct patient{
        uint id;
        string fullName;
        mapping(uint => string[]) DoctorAccess;        
    }

    function getPatient(uint patientId, uint doctorId) public returns (string[]) {
        patient p;
        p.id = 1;
        p.fullName="Saran";
        p.DoctorAccess[doctorId].push("Doctor1Key");
        return p.DoctorAccess[doctorId];
    }
}

Die Zusammenstellung des Codes sieht gut aus. Daher habe ich einen Testfall für den obigen wie unten angegeben erstellt.

pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;

import "truffle/Assert.sol";
import "../contracts/Funding.sol";

contract FundingTest {

    function testSum() public {
        Funding  f= new Funding();
        Assert.equal(f.sum(1,2),3," two plus one should be three");
    }

    function test_getPatient() public {
        Funding f = new Funding();
        string[] doctorKeys;
        doctorKeys.push("Doctor1Key");
        Assert.equal(f.getPatient(1,1),doctorKeys, "The doctor mapping should be a valid one");
    }
}

Wenn ich versuche, den Testfall auszuführen, erhalte ich den folgenden Fehler

,/H/ethereum/PM/test/FundingTest.sol:18:9: TypeError: Member „equal“ nicht gefunden oder nicht sichtbar nach argumentabhängiger Suche in type(library Assert) Assert.equal(f.getPatient(1, 1),doctorKeys, "Die Arztzuordnung sollte gültig sein");

Ist der obige Testfall falsch oder gibt es etwas, das angegangen werden muss.

In ähnlicher Weise habe ich eine solidity-Funktion erstellt, die die Struktur zurückgibt, aber ich finde kein Beispiel, das verwendet werden kann, um die von der Methode innerhalb des Testfalls zurückgegebene Struktur zu verbrauchen.

Antworten (1)

Die equal-Methode in Soliditys Assert unterstützt keine Arrays.

Wie hier erwähnt, müssten Sie für jeden Eintrag im Array eine separate Assert.equal-Anweisung erstellen.