TDD-在R3中运行合同测试的断言错误

时间:2019-01-09 16:14:53

标签: corda

在Corda的合同测试中(来自Git存储库的IOUIssueTests),mustIncludeIssueCommand()的测试期望发生异常,但不会抛出异常。

   public void mustIncludeIssueCommand() {
        IOUState iou = new IOUState(Currencies.POUNDS(1), ALICE.getParty(), BOB.getParty());

        ledger(ledgerServices, l -> {
            l.transaction(tx -> {
                tx.output(IOUContract.IOU_CONTRACT_ID, iou);
                tx.command(Arrays.asList(ALICE.getPublicKey(), BOB.getPublicKey()), new Commands.DummyCommand()); // Wrong type.
                return tx.failsWith("Contract verification failed");
            });
            l.transaction(tx -> {
                tx.output(IOUContract.IOU_CONTRACT_ID, iou);
                tx.command(Arrays.asList(ALICE.getPublicKey(), BOB.getPublicKey()), new IOUContract.Commands.Issue()); // Correct type.
                return tx.verifies();
            });
            return null;
        });
    }

此操作失败

java.lang.AssertionError: Expected exception but didn't get one

    at net.corda.testing.dsl.Verifies$DefaultImpls.failsWith(LedgerDSLInterpreter.kt:66)
    at net.corda.testing.dsl.TransactionDSLInterpreter$DefaultImpls.failsWith(TransactionDSLInterpreter.kt)
    at net.corda.testing.dsl.TestTransactionDSLInterpreter.failsWith(TestDSL.kt:67)
    at net.corda.testing.dsl.TransactionDSL.failsWith(TransactionDSLInterpreter.kt)

我尝试在解决方案仓库中运行代码,这似乎也失败了。我缺少什么吗?

1 个答案:

答案 0 :(得分:1)

Corda培训应用程序背后的目的之一就是表明预期会失败,在这种情况下,您可以看到单元测试期望事务失败:return tx.failsWith("Contract verification failed");

在单元测试的前面,我们可以看到测试失败的原因:new Commands.DummyCommand()这不是有效的命令,IOUContract应该使事务失败,因为它与{{ 1}}命令。

切换到Issue类时,必须有一行检查事务中包含的命令。执行此操作的方法是IOUContract。确保您通过了正确的命令,并且应该能够通过流测试的这一步。

出于教育原因,我避免在此处给出完整的答案,但是您可以在培训的解决方案存储库中查看答案。