使用 Aggregator 测试 Metrics.Counter 值的方法

Way to test Metrics.Counter value as done with Aggregator

从 Beam 2 开始使用 Aggregators being removed,是否有测试 Counter 值的首选方法,就像我对 Aggregators:

所做的那样
assertThat(tester.getAggregatorValue(fn.success)).isEqualTo(1);
assertThat(tester.getAggregatorValue(fn.failure)).isEqualTo(0);
assertThat(tester.getAggregatorValue(fn.empty)).isEqualTo(0);

其中 tester 是我的 DoFn 实现的 DoFnTester class 和 fn 实例的实例,带有聚合器 successfailureempty 是最终的包私有可见字段。

这类似于最近在 user@beam.apache.org 列表中提出的问题。

answer there suggested installing a MetricsContainerImpl before running the test, and interacting with that, like Beam does for its existing tests (eg., LateDataDroppingDoFnRunnerTest).

他们还把它封装在一个TestRule:

@Rule TestMetrics metrics = new TestMetrics();

@Test
public void invalids() {
  final DoFnTester<InputT, OutputT> doFnTester =
    DoFnTester.of(fixture);
  doFnTester.processElement(input);

  assertThat(metrics,counterValue(fixture.ctr), is(1L));
}