在MockNetwork测试中,NetworkMapCache是​​空的

我正在编写一些轻量级的流测试嘲弄一切,我遇到了错误,在所有节点NetworkMapService只包含节点本身。 另一方面,身份服务包含参与测试的所有3个节点。

net = MockNetwork() issuer = net.createNode(legalName = CHARLIE.name) alice = net.createNode(legalName = ALICE.name) bob = net.createNode(legalName = BOB.name) issuer.registerInitiatedFlow(IssueClaimFlow.Issuer::class.java) alice.registerInitiatedFlow(VerifyClaimFlow.Prover::class.java) MockServices.makeTestDatabaseAndMockServices(createIdentityService = { InMemoryIdentityService(listOf(ALICE_IDENTITY, BOB_IDENTITY, CHARLIE_IDENTITY), emptySet(), DEV_TRUST_ROOT) } ) net.registerIdentities() net.runNetwork() 

在这种情况下,流程顺利进行,直到第一次sendAndRecieve()调用。 在那里我得到:

12:28:12.832 [模拟网络]警告net.corda.flow。[8f685c46-9ab6-4d64-b3f2-6b7476813c3b] – 由意外的exception终止java.lang.IllegalArgumentException:不知道党C = ES,L =马德里O =爱丽丝公司

有趣的事情,测试仍然完成绿色(没有有用的工作完成你)。 但是,它可能是另一个问题的话题。

我可以通过像这样手动设置缓存来克服它:

  alice.services.networkMapCache.addNode(issuer.info) bob.services.networkMapCache.addNode(alice.info) 

但是,这是正确的方式去? 我在样品或任何地方都看不到这样的东西。

如果查看MockNetwork.createNode的定义,则MockNetwork.createNode默认为null

相反,您应该使用MockNetwork.createSomeNodes为您创建网络映射节点,然后将该节点设置为其创建的每个后续节点的网络映射。

这里是一个来自CorDapp示例的例子:

 network = MockNetwork() val nodes = network.createSomeNodes(2) a = nodes.partyNodes[0] b = nodes.partyNodes[1] 

你可以在这里看到完整的例子: https : //github.com/corda/cordapp-example/blob/release-V2/kotlin-source/src/test/kotlin/com/example/flow/IOUFlowTests.kt 。