package com.kendelong.util.performance; import static org.junit.Assert.*; import org.junit.Test; public class PerformanceMonitorTest { private PerformanceMonitor monitor = new PerformanceMonitor(); @Test public void givenBlank_whenOneTimeEntered_thenItHasOneAccess() { monitor.addTiming(12); assertEquals(1, monitor.getNumberOfAccesses()); } @Test public void givenBlank_whenThreeTimesEntered_thenItHasThreeAccesses() { monitor.addTiming(12); monitor.addTiming(12); monitor.addTiming(12); assertEquals(3, monitor.getNumberOfAccesses()); } @Test public void givenBlank_whenOneExceptionEntered_thenItHasOneAccess() { monitor.addException(); assertEquals(1, monitor.getNumberOfAccesses()); } @Test public void givenBlank_whenOneTimeEntered_thenItHasThatAverage() { long value = 12; monitor.addTiming(value); assertEquals(value, monitor.getAverageResponseTime(), 0.0001); } @Test public void givenBlank_whenThreeTimesEntered_thenAverageIsCorrect() { monitor.addTiming(12); monitor.addTiming(9); monitor.addTiming(17); assertEquals(12.6667, monitor.getAverageResponseTime(), 0.0001); } @Test public void givenBlank_whenThreeTimesEntered_thenMaximumIsCorrect() { monitor.addTiming(12); monitor.addTiming(9); monitor.addTiming(14); assertEquals(14, monitor.getMaximumResponseTime(), 0.0001); } @Test public void givenBlank_whenThreeTimesEntered_thenMinimumIsCorrect() { monitor.addTiming(12); monitor.addTiming(9); monitor.addTiming(14); assertEquals(9, monitor.getMinimumResponseTime(), 0.0001); } @Test public void testAccessesPerSecond() { class SettablePerformanceMonitor extends PerformanceMonitor { public SettablePerformanceMonitor(long startTime) { super(startTime); } private long time; @Override protected long getTime() { return time; } public void setTime(long t) { time = t; } }; long startTime = 1000; SettablePerformanceMonitor monitor = new SettablePerformanceMonitor(startTime); for(int i = 0; i < 10; i++) monitor.addTiming(42); long stopTime = startTime + 1_000_000; monitor.setTime(stopTime); assertEquals(0.01, monitor.getAccessesPerSecond(), 0.00001); } }