私はJavaでテストを書くのが初めてで、クラスのメソッドが呼び出されたかどうかをテストできないようです。Mockito - クラスのメソッドが呼び出されたかどうかをテストします。
私はdatadogにメトリックを送信しており、別のクラスの関数が呼び出された場合にコード内でテストしたいと考えています。
私は最初に嘲笑する必要があると言いますが、それを動作させることはできませんでした。
MetricRecorder.java
import com.timgroup.statsd.StatsDClient;
import com.timgroup.statsd.NonBlockingStatsDClient;
import com.google.common.base.Preconditions;
public class MetricRecorder {
private final String namespace;
private final static StatsDClient metrics = new NonBlockingStatsDClient(
"my.prefix",
"localhost",
8125,
new String[] {"tag:value"}
);
public MetricRecorder(String namespace) {
Preconditions.checkNotNull(namespace);
this.namespace = namespace;
}
public void inc(String metricName) {
this.inc(metricName, 1);
}
public void inc(final String metricName, final long value) {
Preconditions.checkNotNull(metricName);
try {
metrics.recordHistogramValue(MetricRecorder.name(namespace, metricName), value);
} catch (Exception e) {
logger.warn("Unable to record metric {} due to :", metricName, e);
}
}
...
}
MetricRecorderTest.java
public class MetricsRecorderTest {
@Test
public void metricsRecorderTest() {
MetricRecorder recorder = new MetricRecorder("dev");
recorder.inc("foo", 1);
verify(recorder.metrics, times(1)).recordHistogramValue(eq("dev.foo"), 1);
}
}
私がテストを実行すると、私はこの=> org.mockito.exceptions.misusing.NotAMockException取得:(確認するために渡された引数を )はNonBlockingStatsDClientタイプであり、モックではありません!
recordHistogramValueが呼び出された場合、どのようなテストが必要なのでしょうか?その場合はどのような引数を使用しますか?
あなたは私が既に持っているコンストラクタに加えて、このコンストラクタパターンを使用することをお勧めですか?私はこれが技術的にはうまくいくと思っています....私が作らなければならない他の変更は、public final static StatsDClientメトリクスをprivate static StatsDClientメトリックに変更することです...これは、recorder.metricsをテストするために公開されなければならず、どちらか。 –