我是用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是否被调用,如果是的话,什么参数?
你是否建议我除了我已经有的构造函数外还使用这个构造函数模式?我认为这将工作在技术上....只有其他变化,我将不得不做的是公共最终静态StatsDClient指标私人静态StatsDClient指标...它必须公开测试recorder.metrics,它不能是最终的无论是。 –