如何用MockStub调试contractapi链码?
时间: 2023-05-28 17:02:21 浏览: 185
MockStub 是 Chaincode 开发中常用的工具之一,可以在没有实际网络的情况下进行单元测试和本地调试。
以下是使用 MockStub 调试 contractapi 链码的步骤:
1. 引入必要的包
```go
import (
"github.com/hyperledger/fabric-chaincode-go/pkg/contractapi"
"github.com/hyperledger/fabric-chaincode-go/pkg/mocks"
)
```
2. 编写测试代码
```go
func TestMyChaincode(t *testing.T) {
cc := new(MyChaincode)
mockStub := mocks.NewStub("mycc", cc)
// 模拟调用 Init 方法
res := mockStub.MockInit("tx1", [][]byte{[]byte("init"), []byte("100")})
if res.Status != shim.OK {
t.Errorf("Init failed: %s", res.Message)
}
// 模拟调用 Invoke 方法
res = mockStub.MockInvoke("tx2", [][]byte{[]byte("transfer"), []byte("tom"), []byte("50")})
if res.Status != shim.OK {
t.Errorf("Invoke failed: %s", res.Message)
}
// 模拟获取状态
res = mockStub.MockInvoke("tx3", [][]byte{[]byte("query"), []byte("tom")})
if res.Status != shim.OK {
t.Errorf("Query failed: %s", res.Message)
}
if string(res.Payload) != "50" {
t.Errorf("Query result incorrect. Expecting 50, but got %s", string(res.Payload))
}
}
```
3. 运行测试
在终端中运行以下命令,即可执行测试代码:
```shell
go test -v mycc_test.go
```
以上是使用 MockStub 调试 contractapi 链码的方法。注意,MockStub 可能不能完全模拟实际网络环境,因此在实际环境中仍需谨慎测试。
阅读全文