【问题标题】:Hyperledger Fabric unit test cross-chaincode invocation without collapsing vendor folderHyperledger Fabric 单元测试跨链代码调用而不折叠供应商文件夹
【发布时间】:2017-07-19 17:05:59
【问题描述】:

当我尝试在本地 golang 中执行单元测试时,当我尝试通过 MockStub 对象实例化和调用另一个链代码时,我遇到了编译问题。以下是我的文件层次结构:

├── transaction-chaincode
│   ├── transaction.go
│   ├── transaction_test.go
│   └── vendor
└── user-chaincode
    ├── user.go
    ├── user_test.go
    └── vendor

这里的场景基本上涉及其中一个链码,例如user.go,调用另一个链码transaction.go。两个目录中的供应商文件夹包含完全相同的内容。

当我尝试通过 user_test.go 中的 shim.NewMockStub 实例化事务链码的新实例时会出现问题,因为事务模拟对象从事务链码/供应商/而不是用户链码中查找 init 方法/vendor/,尽管供应商文件夹具有相同的包(因此方法相同)。

我可以通过在 transaction-chaincode 和 user-chaincode 的父目录中拥有一个供应商文件夹来消除此错误,但出于开发目的我不能这样做。您建议我如何解决这个单元测试问题,同时将供应商文件夹保留在各自的位置?

【问题讨论】:

  • 您使用什么工具进行销售?您对vendor 目录中的包使用什么导入路径?
  • @yazgazan 使用什么工具进行销售是否重要?我用的是govendor,导入路径是vendor目录里面的包和原来的包是一样的
  • “常规”方法是针对供应商二进制文件,而不是库。如果您的 vendoring 工具使 dep 树变平(没有嵌套的供应商目录),您仍然可以在库中使用 vendoring。您可能可以通过在 transaction-chaincode 中出售 user-chaincode 来解决您的问题,反之亦然,但这会使维持出售变得痛苦。我认为最好的解决方案是在您的父目录中进行供应商(假设父目录是您的存储库的根目录)。

标签: go hyperledger hyperledger-fabric


【解决方案1】:

如果我理解正确,您将 shim 和其他依赖项放在每个供应商文件夹中。 user_test.go 然后执行类似 NewMockStub(..., &transaction_chaincode.transaction{}) 的操作。您希望 transaction_chaincode.transaction 绑定到用户/供应商?

我认为这不会发生。 transaction_chaincode.transaction 中的 shim 导入将绑定到它的 transaction_chaincode/vendor。

如果上面的理解是正确的,为什么你认为它是一个“问题”?

【讨论】:

  • 是的,您的理解是正确的。问题是我无法模拟链代码间调用,因为某些函数依赖于调用其他链代码。例如,我需要在 user_chaincode_test 中使用 transaction_chaincode.transaction,但是 go 编译器会报错,因为 user_chaincode_test 无法在 transaction_chaincode/vendor 中查找绑定的 shim 导入;它只引用了 user_chaincode/vendor 的路径,这与启动事务 MockStub 不匹配
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多