云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

服务器_华为云官方网站_9元

小七 141 0

Hyperledger链码是一个用Go、JavaScript或Java编写的程序。与任何其他软件一样,它有时趋于复杂,可能包括各种调用、交互和业务逻辑。对于开发人员来说,在快速的应用程序开发周期中对自己的代码充满信心是很重要的。

在这个博客中,我想分享我的尝试,在部署Hyperledger的内置功能之前在本地测试Hyperledger应用程序,然后展示如何使用BDD方法。

在我的场景中,我想演示一个区块链网络参与者之间的基本资产转移过程。

因此,将有两个所有者实例化,它们将交换一个资产对象。资产的转移将进行单元测试以及实体的创建过程。这是一个非常基本的设置,只是为了显示方法,几乎不保留分类帐的状态。当然,它可以升级到更复杂的端到端流程,并具有相应的代码质量和测试覆盖率。

如果您尚未设置SAP Cloud Foundry帐户,并且希望尝试Hyperledger Fabric服务,我建议你关注我们社区成员的博客:

一步一步创建你的第一个区块链项目在SAP云平台中创建基于区块链的应用

从工具的角度来看,您可以使用Atom作为代码编辑器。即使任何文本编辑器都可以。构建和测试命令将在Git客户机和Go语言运行时中运行。请看这里的详细安装说明。

让我们开始吧!

提示:如果您有围棋的经验,并且您希望看到最终结果,而不必进入设置细节,那么非常欢迎您直接跳到下面的第3步。

所有者将由一个平面结构表示:

记录和读取所有者的两种方法如下:

我们还希望为要在其中交换的资产建模业主。它的结构将由Id字段、序列号、物料编号、描述和所有者Id组成,全民淘客,如下所示:

在分类账中记录和读取资产的两种方法与所有者的方法非常相似,因此这里没有必要显示它们。看看set\u owner方法会很有趣,它将资产从一个所有者移动到另一个所有者:

我们创建的实体现在可以被chaincode主程序使用,该程序由用于网络初始化的Init方法和直接调用实例方法的Invoke方法组成。

上面的代码完全可以部署到SAP CF Hyperledger Fabric服务,因此您可以自己尝试。安装链码时不要忘记创建一个zip文件,如这里所述。

现在我们可以开始基于我们实现的基本模型构建我们的第一个测试。幸运的是,我们不必在顶层构建大量代码,因为运行时环境在测试包中为我们提供了大量随时可用的功能。

正式的SAP Chaincode单元测试文档为如何开始编写单元测试提供了有价值的输入。让我们试着跟进。

测试将在一个单独的地方进行_测试.go文件。我们只需要导入测试包,并创建至少一个前缀为"Test"的函数,就像下面的代码一样。

让我们分解一下:

我们通过第一条语句指定这个测试属于"main"包。理想情况下,大淘客cms,测试应该放在一个单独的包中,以尊重被测试的"主"包的封装,但这里我们不想把问题复杂化。这是因为文件夹结构和全局变量可能没有正确配置,如果您自己尝试,代码可能无法运行。你可以在这里找到更多关于这个主题的信息。测试从名为"InitChaincode"的helper方法中的MockStub初始化开始。链码函数由封装在"Invoke"助手中的MockInvoke方法调用。辅助程序已被分离到utils文件中

测试通过go test-v命令(详细模式)在控制台中运行。

总体而言,此步骤的代码重复了官方SAP指南,看起来相当原始。让我们试着给它添加一些糖分和语义。

当我开始准备这个步骤时,我被以下考虑所驱使:

我需要重新组织测试,使代码更具可读性。我计划通过应用Arrange-Act-Assert方法进行改进。因此,我将首先准备好所有要执行的数据,然后调用chaincode invoke方法,最后通过比较返回的结果和期望的结果来检查分类帐的状态。在这样做的时候,我不应该把注意力放在纯粹的技术细节上,而应该仔细检查每一种方法,因为这会花费太多的精力。把重点放在行为方面是有益的,这样测试可以确保调用函数如预期的那样协同工作。

我准备了我的代码,并打算在博客中解释它,大数据风控,但后来我意识到我实际上陷入了反模式。测试已经变得太复杂了,没有任何实质性的好处。他们很难跟上。所以我决定四处看看,发现了一个很好的BDD测试框架,叫做gingo。它将自己安装到现有的Go环境中,并允许您使用常用的Go test命令运行测试。与其他语言中流行的BDD框架一样,gingo允许将测试分组到容器块中,容器块也可以保存断言。它还提供了方便的结构实用程序,可以提高代码重用。让我们看看如何使用它。

首先,你应该安装银杏:

其次,您应该将gingo的测试套件引导到您的工作目录:

后一个命令将生成一个名为\u project \u suite的文件_测试.go包含类似于以下代码:

让我们更仔细地研究一下: