测试可以调用另一个链码的GoLang Invoke方法

时间:2018-12-13 09:29:03

标签: hyperledger-fabric hyperledger

我一直在尝试使用垫片“ MockStub”对链代码进行测试,以对链代码进行测试,并遇到了问题。

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

假设当我在chaincode1中运行MockInvoke并将其某些值传递给另一个函数以执行某些任务时,上述层次结构为。问题是此链码使用垫片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 :(得分:1)

定义代码的方式是对接口进行操作,以便您可以使用实现接口定义的模拟结构。 如果所有依赖项都基于接口,则可以轻松地对其进行模拟。