java로 테스트를 작성하는 데있어서 새로운데, 클래스의 메소드가 호출되는지 테스트 할 수없는 것처럼 보입니다.Mockito - 클래스의 메소드가 호출되는지 테스트합니다.
데이터 막에 메트릭을 보내고 다른 클래스의 함수가 호출 된 경우 코드에서 테스트하려고합니다.
우선 내가 조롱 할 필요가 있다고 말하지만 작동시키지 못한다고합니다.
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를 테스트하기 위해 public이어야하며 final 일 수 없다. 어느 한 쪽. –