当前位置: 首页 > 知识库问答 >
问题:

测试Beam PipelineOptions ValueProvider的@默认值

卫寒
2023-03-14

我想要一个数据流模板,其中一个PipelineOptions参数的默认值。

受在线示例的启发,我在PipelineOptions“sub”-界面中使用ValueProvider占位符来进行延迟参数设置:

  @Default.String("MyDefaultValue")
  ValueProvider<String> getMyValue();
  void setMyValue(ValueProvider<String> value);

如果我在运行时指定参数,模板就可以启动一个真正的GCP数据流作业。但是,如果我尝试在真正执行此操作之前不包含参数进行测试:

@Rule
public TestPipeline pipeline = TestPipeline.create();
...
  
@Test
public void test() {
  PipelineOptions options = PipelineOptionsFactory.fromArgs(new String[] {...}).withValidation();
  ...
  pipeline.run(options);
}

然后,当我的TestPipeline执行一个需要参数的DoFn processElement方法时,我得到

IllegalStateException: Value only available at runtime, but accessed from a non-runtime context: 
RuntimeValueProvider{propertyName=myValue, default=MyDefaultValue}
...

更具体地说,它在org.apache.beam.sdk.options.valueProvider中失败:

@Override
public T get() {
  PipelineOptions options = optionsMap.get(optionsId);
  if (options == null) {
    throw new IllegalStateException(...

人们认为运行时是管道运行的时候,这可能是可以原谅的。

共有1个答案

酆茂才
2023-03-14

当我从Eclipse生成数据流模板时,我也遇到了同样的问题,我的数据流模板从Cloud Composer DAG收到了一个参数。

 类似资料:
  • 综述 现在web应用程序通常会使用服务器上预装的流行的开源或商业软件,这些软件通常被服务器管理员以最小配置或定制状态预装在服务上。更多的,许多硬件供应商(如网络路由器和数据库服务器)提供web页面的配置接口或管理接口。 通常这些应用程序在安装后,没有正确配置,用于初次认证和配置的默认口令信息从来不改变。这些默认口令已经被渗透测试者熟知,同样不幸的,也被恶意攻击者熟知,他们能利用这些默认口令来访问不

  • JUnit Jupiter允许在接口default方法中声明@Test,@RepeatedTest,@ParameterizedTest,@ TestFactory,@TestTemplate,@BeforeEach和@AfterEach。如果测试接口或测试类用@TestInstance(Lifecycle.PER_CLASS)注解(请参阅测试实例生命周期),则可以在测试接口中的static方法或

  • 问题内容: 您是否建议在@Test方法中对测试用例进行任何分组,还是每个测试方案都有一个@Test方法?例如,假设有多种方法可以在应用程序中设置上下文。 以下想法可以接受吗? 或者,您宁愿建议这样做,让每个方法都尽可能原子化: 对于任何反馈,我们都表示感谢。 问题答案: 我更喜欢每种方法有一个测试用例。 首先,如果将它们拆分为多个方法,则比查找代码中嵌入的注释要容易得多。大多数IDE都会为您提供方

  • 认证(希腊语: αυθεντικός = 真实的, 从'authentes' = 作者 得来)是一种建立某些东西(或某些人)是可信的行为,也就是做出事物是真实的的声明。认证某个对象可能意味着确认他的出处,认证某个人通常是确认他的身份。认证依赖于一个或多个认证因素。 在计算机安全领域,认证是尝试确认通信发起者的数字身份的过程。一个常见例子是登陆过程。测试认证模式意味着理解认证过程如何产生作用,并使用

  • 问题内容: Spring-boot利用了Spring配置文件(http://docs.spring.io/spring- boot/docs/current/reference/html/boot-features- profiles.html ),这些配置文件例如允许针对不同的环境进行单独的配置。我使用此功能的一种方法是配置要由集成测试使用的测试数据库。但是我想知道是否有必要创建自己的配置文件“