我们可以在 Cordapp 中模拟 "CordaRPCops" 进行测试吗?

Can we mock "CordaRPCops" in Cordapp for testing purpose?

是否可以模拟 CordaRPCops 以便在项目中执行流程而不创建独立节点或内存中节点(如在模拟网络中)?请告诉我。

I am also adding a link which I found informative regarding this from github issues QA

TestDSL 中没有特定的 class 可用模拟 CordaRPCops。如果您指的是模拟节点的某些功能以进行 cordapp 测试,您应该使用 MockNode。

如果您想在客户端应用程序中模拟 CordaRPCops,您可以使用 mockito 来实现,示例如下:

测试:

@Test
public void testGetStateList(){
    CordaRPCOps cordaRPCOps = Mockito.mock(CordaRPCOps.class);
    Service service = new Service(cordaRPCOps);
    Vault.Page<MyState> myStatePage =
            new Vault.Page<>(Collections.EMPTY_LIST, Collections.EMPTY_LIST, 0L, Vault.StateStatus.ALL, Collections.EMPTY_LIST);
    Mockito.when(cordaRPCOps.vaultQuery(MyState.class)).thenReturn(myStatePage);
    service.getStateList();
}

服务:

public class Service {
    CordaRPCOps cordaRPCOps;

    public Service(CordaRPCOps cordaRPCOps) {
        this.cordaRPCOps = cordaRPCOps;
    }

    public List<StateAndRef<MyState>> getStateList() {
        return cordaRPCOps.vaultQuery(MyState.class).getStates();
    }
}