Тестирование GoLang Invoke метод, который делает вызов другого цепного кода - PullRequest
0 голосов
/ 13 декабря 2018

Я пытался протестировать свои цепные коды, используя прокладки "MockStub", чтобы выполнить проверку моего цепного кода, и натолкнулся на проблему.

  Root
  |
  Some folder
  |
  chaincode 
  ├── chaincode1
  │   ├── chaincode1.go
  │   ├── chaincode1_test.go
  │  
  └── chaincode2
      ├── chaincode2.go
      ├── chaincode2_test.go
  |
  Other folders  

Предположим, что вышеупомянутая иерархия, когда я запускаю MockInvoke в chaincode1, и некоторые его значения передаются другой функции для выполнения некоторых задач.Проблема в том, что этот цепной код использует функцию shims InvokeChaincode и вызывает другой цепной код (например, chaincode2).В любом случае я могу передать MockPeerChaincode вместе с MockInvoke, чтобы решить эту проблему или каким-либо другим способом?

Chaincode-1
func Insert(stub shim.ChaincodeStubInterface, args []string) pb.Response{
//Add to blockchain but create an account
....
makeAccount(stub,AccountIDhash,AccountBalance)
....
}
func makeAccount(stub shim.ChaincodeStubInterface, accountID string, amount string){
 .....
//function includes converting the accountID and ammount to chaincode arguments
//this method invokes the secondchaincode(chaincode2)
response := stub.InvokeChaincode("chaincode2", chaincodearguments, "mychannel")
if response.Status != shim.OK {
    return shim.Error("chaincode1: " + "Unable to create new account from chaincode")
}
return shim.Success([]byte("chaincode1: " + "created new account from chaincode"))


}
....other methods in Chaincode1

1 Ответ

0 голосов
/ 14 декабря 2018

Определить ваш код так, чтобы он работал на интерфейсах, так что вы можете использовать фиктивную структуру, которая реализует определения вашего интерфейса.Если все зависимости основаны на интерфейсе, их можно легко смоделировать.

...