我对Corda非常陌生。 在运行测试时transaction.fails()无法正常工作
----代码---
@Override
public void verify(LedgerTransaction tx) throws IllegalArgumentException {
Command command = tx.getCommand(0);
private final TestIdentity alice = new TestIdentity(new CordaX500Name("Alice", "", "GB"));
private final TestIdentity bob = new TestIdentity(new CordaX500Name("Bob", "", "GB"));
private MockServices ledgerServices = new MockServices(new TestIdentity(new CordaX500Name("TestId", "", "GB")));
private TokenState tokenState = new TokenState(alice.getParty(), bob.getParty(), 1);
if (tx.getInputStates().size() != 0) {
System.out.println(" -- Checking Input Size -- ");
throw new IllegalArgumentException(" Transaction Must have No Inputs ");
}
}
---在测试用例中-
@Test
public void tokenContractRequiresZeroInputsInTheTransaction() {
transaction(ledgerServices, tx -> {
//Has an input, will fail.
tx.input(TokenContract.ID, tokenState);
tx.output(TokenContract.ID, tokenState);
tx.command(alice.getPublicKey(), new TokenContract.Commands.Issue());
tx.fails();
return null;
});
答案 0 :(得分:0)
此测试将按预期通过。
对tx.fails()
的调用意味着给定当前的交易,调用verify
方法应为至少一个交易合同引发异常。否则,tx.fails()
将引发异常,从而导致测试失败。
在您的情况下,调用verify
的{{1}}方法将引发异常,因为事务具有输入,从而导致合同引发异常。 TokenContract
因此将不引发异常,并且您的测试将通过。
P.S。您不应直接在tx.fails()
内部使用TestIdentity
和MockServices
之类的测试类。