使用 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
实例的实例,带有聚合器 success
,failure
和 empty
是最终的包私有可见字段。
这类似于最近在 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));
}
从 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
实例的实例,带有聚合器 success
,failure
和 empty
是最终的包私有可见字段。
这类似于最近在 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));
}