_廿_尘 2023-04-05 11:26 采纳率: 0%
浏览 9

fabric 2.x版本链码单元测试时出现的问题

我写了以下的两段链码

// 查看竞赛信息是否存在
func (cc *SmartContract) ContestExists(ctx contractapi.TransactionContextInterface,
    id string) (bool, error) {
    contestJson, err := ctx.GetStub().GetState("contest" + id)
    if err != nil {
        return false, fmt.Errorf("failed to read from the world state: %v", err)
    }
    fmt.Println("json:", contestJson != nil)  // 此处是一个测试点
    return contestJson != nil, nil
}

// 创建竞赛信息
func (cc *SmartContract) CreateContest(ctx contractapi.TransactionContextInterface,
    id, name, desc string) error {
    exists, err := cc.ContestExists(ctx, id)
    if err != nil {
        return err
    }
    if exists {
        return fmt.Errorf("the contest %s already exists.\n", id)
    }
    contest := &Contest{
        EducateId:   id,
        Contest:     name,
        Description: desc,
    }
    contestJson, err := json.Marshal(contest)
    if err != nil {
        return fmt.Errorf(">> contest MARSHAL error: %v", err)
    }
    err = ctx.GetStub().PutState("contest" + contest.EducateId, contestJson)
    if err != nil {
        return fmt.Errorf(">> contest PUT error: %v", err)
    }
    return nil
}

然后以下是我所写的单元测试代码

func TestSmartContract_CreateContest(t *testing.T) {
    chaincodeStub := &mocks.ChaincodeStub{}
    transactionContext := &mocks.TransactionContext{}
    transactionContext.GetStubReturns(chaincodeStub)

    contestCreator := &SmartContract{}
    err := contestCreator.CreateContest(transactionContext,
        "", "", "")
    require.NoError(t, err)

    chaincodeStub.GetStateReturns([]byte{}, nil)
    err = contestCreator.CreateContest(transactionContext,
        "4", "", "")
    //require.NoError(t, err)
    require.EqualError(t, err, "the contest 4 already exists.\n")

    chaincodeStub.GetStateReturns(nil, fmt.Errorf("unable to retrieve contest"))
    err = contestCreator.CreateContest(transactionContext,
        "4", "", "")
    require.EqualError(t, err, "failed to read from the world state: unable to retrieve contest")
}

然而运行测试时,测试点先后出现了截然不同的结果

img

json: false
json: true

下断点调试后发现是在调用下面这一句时由false转为了true

err = contestCreator.CreateContest(transactionContext,
        "4", "", "")

但目前依然不太清楚这究竟是什么原因,应该怎么解决这个问题呢?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-06 14:21
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 4月5日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表