如何防止MockNetwork流量测试中的Corda服务自动初始化?

时间:2018-02-06 11:48:04

标签: corda

从Corda 2.0开始,在节点启动期间会自动调用带有@CordaService注释的类的构造函数。例如,Corda Service原始类实现可以在其构造函数中初始化网络连接,这在单元测试中可能是不可取的。

我目前的解决方法是使用布尔标志(从环境变量设置)来标记是运行还是跳过Corda服务初始化代码。有没有更好的方法(例如,在不使用PowerMock等的情况下将模拟Corda服务类实例注入MockNetwork.MockNode)?

1 个答案:

答案 0 :(得分:0)

您的解决方法是目前解决此问题的最佳方法。请参阅https://r3-cev.atlassian.net/browse/CORDA-989

在您的方法中,您可以按如下方式定义服务:

@CordaService
class MyService(services: ServiceHub) : SingletonSerializeAsToken()  {
    private companion object {
        val logger = loggerFor<MyService>()
        val load = System.getenv("enable-my-service")
    }

    init {
        if (load == "false") {
            logger.warn("Not loading service")
        } else {
            logger.info("Loading service")
        }
    }
}

然后,您可以使用环境变量在测试中关闭服务。