Corda-transaction.fails()在运行测试时不工作

Corda-transaction.fails()在运行测试时不工作,corda,Corda,我对科尔达很陌生。 transaction.fails()在运行测试时不工作 ----代码--- ---在测试用例中-- 正如预期的那样,该测试将通过 调用tx.fails()意味着给定事务的当前状态,调用verify方法应至少为该事务的一个契约抛出异常。如果没有,则tx.fails()将抛出异常,导致测试失败 在您的情况下,调用TokenContract的verify方法将引发异常,因为事务有输入,导致该契约引发异常tx.fails()不会引发异常,您的测试将通过 另外,您不应该直接在veri

我对科尔达很陌生。 transaction.fails()在运行测试时不工作

----代码---

---在测试用例中--


正如预期的那样,该测试将通过

调用
tx.fails()
意味着给定事务的当前状态,调用
verify
方法应至少为该事务的一个契约抛出异常。如果没有,则
tx.fails()
将抛出异常,导致测试失败

在您的情况下,调用
TokenContract
verify
方法将引发异常,因为事务有输入,导致该契约引发异常<因此,code>tx.fails()不会引发异常,您的测试将通过

另外,您不应该直接在
verify
中使用测试类,例如
TestIdentity
MockServices

@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;                                                         
});