Utiliser une simulation pour tester un code de chaîne

Cette méthode de test utilise une version fictive du stub shim.ChaincodeStubInterface. Ainsi, vous pouvez simuler une fonctionnalité de votre code de chaîne avant de le déployer dans Oracle Blockchain Platform. Vous pouvez également utiliser cette bibliothèque pour créer des tests d'unité pour votre code de chaîne.

  1. Créer un fichier de test correspondant au nom du fichier de code de chaîne.
    Par exemple, si car_dealer.go est le code de mise en oeuvre réel de votre contrat intelligent, vous créez une suite de tests nommée car_dealer_test.go contenant tous les tests pour car_dealer.go. Utilisez le format *_test.go pour le nom du fichier de la suite de tests.
  2. Créez votre package et importez des instructions.
    package main
    
    import (
        "fmt"
        "testing"
    
        "github.com/hyperledger/fabric/core/chaincode/shim"
    )
  3. Créez votre test d'unité.
    /*
    * TestInvokeInitVehiclePart simulates an initVehiclePart transaction on the CarDemo cahincode
     */
    func TestInvokeInitVehiclePart(t *testing.T) {
        fmt.Println("Entering TestInvokeInitVehiclePart")
    
        // Deploy mockStub using CarDemo as the target chaincode to unit test
        stub := shim.NewMockStub("mockStub", new(CarDemo))
        if stub == nil {
            t.Fatalf("MockStub creation failed")
        }
    
        var serialNumber = "ser1234"
    
        // Here we perform a "mock invoke" to invoke the function "initVehiclePart" method with associated parameters
        // The first parameter is the function we are invoking
        result := stub.MockInvoke("001",
            [][]byte{[]byte("initVehiclePart"),
                []byte(serialNumber),
                []byte("tata"),
                []byte("1502688979"),
                []byte("airbag 2020"),
                []byte("aaimler ag / mercedes")})
    
        // We expect a shim.ok if all goes well
        if result.Status != shim.OK {
            t.Fatalf("Expected unauthorized user error to be returned")
        }
    
        // here we validate we can retrieve the vehiclePart object we just committed by serianNumber
        valAsbytes, err := stub.GetState(serialNumber)
        if err != nil {
            t.Errorf("Failed to get state for " + serialNumber)
        } else if valAsbytes == nil {
            t.Errorf("Vehicle part does not exist: " + serialNumber)
        }
    }

Note :

Toutes les interfaces du stub ne sont pas implémentées. Les fonctions de talon suivantes ne sont pas prises en charge.
  • GetQueryResult

  • GetHistoryForKey

Une tentative d'appel de l'une de ces fonctions entraînera une erreur.