TDD - ошибки утверждения при выполнении контрактных тестов в R3 - PullRequest
0 голосов
/ 09 января 2019

В контрактных тестах для 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 голосов
/ 12 января 2019

Одна из целей учебного приложения Corda заключалась в том, чтобы показать, что ожидаются сбои, в этом случае вы можете видеть, что модульный тест ожидает, что транзакция завершится неудачей: return tx.failsWith("Contract verification failed");

Рассматривая ранее в модульном тесте, мы можем увидеть причину, по которой тест не пройден: new Commands.DummyCommand() Это недопустимая команда, и IOUContract должен провалить транзакцию, поскольку она не соответствует команде Issue.

При переключении на класс IOUContract должна быть строка, которая проверяет команду, содержащуюся в транзакции. Метод, который делает это tx.commands.requireSingleCommand. Убедитесь, что вы ввели правильную команду, которая требуется, и вы сможете пройти этот этап теста потока.

Я избегал давать здесь полный ответ по образовательным причинам, но вы можете проверить ответ в репозитории решений обучения.

...