千分尺单元测试 Java

Fir*_*lia 3 java spring spring-boot micrometer spring-micrometer

我创建了一个 Micrometer 类,其中创建并递增计数器。如何为公共方法编写单元测试用例并避免向 Micrometer 注册或发送事件。

public class MicroMeter {
private static final MeterRegistry registry = Metrics.globalRegistry;
private Counter createCounter(final String meterName, Map<String, String> mp) {

    List<Tag> tags = new ArrayList<>();
    for (Map.Entry<String, String> entry : mp.entrySet()) {
        tags.add(Tag.of(entry.getKey(), entry.getValue()));
    }
    return Counter
            .builder(meterName)
            .tags(tags)
            .register(registry);
}

private void incrementCounter(Counter counter)  {
        counter.increment();
}

public static void createCounterAndIncrement(final String meterName, Map<String, String> mp){
    MicroMeter microMeter = new MicroMeter();
    Counter counter = microMeter.createCounter(meterName, dimensions);
    microMeter.incrementCounter(counter);
}
Run Code Online (Sandbox Code Playgroud)

}

小智 9

针对此场景编写测试的一种方法是将其SimpleMeterRegistry添加到 中globalRegistry,获取Counter然后测试预期行为。

示例片段:

private MeterRegistry meterRegistry;

@BeforeEach
void setUp() {
  meterRegistry = new SimpleMeterRegistry();
  Metrics.globalRegistry.add(meterRegistry);
}

@AfterEach
void tearDown() {
  meterRegistry.clear();
  Metrics.globalRegistry.clear();
}

@Test
void testCreateCounterAndIncrement() {
  // When
  MicroMeter.createCounterAndIncrement("meterName", Map.of("key", "val"));

  // Then
  var counter = meterRegistry.find("meterName").counter();
  then(counter).isNotNull();
  then(counter.count()).isEqualTo(1);
  then(counter.getId().getTag("key")).isEqualTo("val");
 }
Run Code Online (Sandbox Code Playgroud)