### Question:
CyclingSpeedAndCadenceMeasurementDataCallback extends ProfileReadResponse implements CyclingSpeedAndCadenceMeasurementCallback, CyclingSpeedAndCadenceCallback { @Override public void onWheelMeasurementReceived(@NonNull final BluetoothDevice device, final long wheelRevolutions, final int lastWheelEventTime) { if (mLastWheelEventTime == lastWheelEventTime) return; if (mLastWheelRevolutions >= 0) { final float circumference = getWheelCircumference(); float timeDifference; if (lastWheelEventTime < mLastWheelEventTime) timeDifference = (65535 + lastWheelEventTime - mLastWheelEventTime) / 1024.0f; else timeDifference = (lastWheelEventTime - mLastWheelEventTime) / 1024.0f; final float distanceDifference = (wheelRevolutions - mLastWheelRevolutions) * circumference / 1000.0f; final float totalDistance = (float) wheelRevolutions * circumference / 1000.0f; final float distance = (float) (wheelRevolutions - mInitialWheelRevolutions) * circumference / 1000.0f; final float speed = distanceDifference / timeDifference; mWheelCadence = (wheelRevolutions - mLastWheelRevolutions) * 60.0f / timeDifference; onDistanceChanged(device, totalDistance, distance, speed); } mLastWheelRevolutions = wheelRevolutions; mLastWheelEventTime = lastWheelEventTime; } CyclingSpeedAndCadenceMeasurementDataCallback(); protected  CyclingSpeedAndCadenceMeasurementDataCallback(final Parcel in); @Override void onDataReceived(@NonNull final BluetoothDevice device, @NonNull final Data data); @Override void onWheelMeasurementReceived(@NonNull final BluetoothDevice device, final long wheelRevolutions, final int lastWheelEventTime); @SuppressWarnings("StatementWithEmptyBody") @Override void onCrankMeasurementReceived(@NonNull final BluetoothDevice device, final int crankRevolutions, final int lastCrankEventTime);  }### Answer:
@Test public void onWheelMeasurementReceived() { final DataReceivedCallback callback = new CyclingSpeedAndCadenceMeasurementDataCallback() { @Override public void onWheelMeasurementReceived(@NonNull final BluetoothDevice device, final long wheelRevolutions, final int lastWheelEventTime) { assertEquals("Wheel measurement", 12345, wheelRevolutions); assertEquals("Wheel last event time", 1000, lastWheelEventTime); } @Override public void onInvalidDataReceived(@NonNull final BluetoothDevice device, @NonNull final Data data) { assertEquals("Correct CSC reported as invalid", 1, 2); } @Override public void onDistanceChanged(@NonNull final BluetoothDevice device, final float totalDistance, final float distance, final float speed) { } @Override public void onCrankDataChanged(@NonNull final BluetoothDevice device, final float crankCadence, final float gearRatio) { } }; final MutableData data = new MutableData(new byte[7]); assertTrue(data.setByte(0x01, 0)); assertTrue(data.setValue(12345, Data.FORMAT_UINT32, 1)); assertTrue(data.setValue(1000, Data.FORMAT_UINT16, 5)); callback.onDataReceived(null, data); }