从Corda 2.0开始,在节点启动期间会自动调用带有@CordaService
注释的类的构造函数。例如,Corda Service原始类实现可以在其构造函数中初始化网络连接,这在单元测试中可能是不可取的。
我目前的解决方法是使用布尔标志(从环境变量设置)来标记是运行还是跳过Corda服务初始化代码。有没有更好的方法(例如,在不使用PowerMock等的情况下将模拟Corda服务类实例注入MockNetwork.MockNode
)?
答案 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")
}
}
}
然后,您可以使用环境变量在测试中关闭服务。