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

时间:2018-12-26 08:49:31

标签: corda

我对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;                                                         
});                                                                             

1 个答案:

答案 0 :(得分:0)

此测试将按预期通过。

tx.fails()的调用意味着给定当前的交易,调用verify方法应为至少一个交易合同引发异常。否则,tx.fails()将引发异常,从而导致测试失败。

在您的情况下,调用verify的{​​{1}}方法将引发异常,因为事务具有输入,从而导致合同引发异常。 TokenContract因此将引发异常,并且您的测试将通过。

P.S。您不应直接在tx.fails()内部使用TestIdentityMockServices之类的测试类。