package com.zy.asrs.service.impl; import com.zy.asrs.entity.WrkAnalysis; import com.zy.asrs.service.BasCrnpErrLogService; import com.zy.asrs.service.BasDualCrnpErrLogService; import com.zy.asrs.service.BasRgvErrLogService; import com.zy.asrs.service.BasStationService; import com.zy.asrs.service.BasWrkStatusService; import com.zy.asrs.service.WrkMastLogService; import com.zy.asrs.service.WrkMastService; import org.junit.jupiter.api.Test; import org.springframework.test.util.ReflectionTestUtils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; class WrkAnalysisServiceImplTest { @Test @SuppressWarnings("unchecked") void buildAnalysisResult_calculatesAverageTaskPerHour() { BasWrkStatusService basWrkStatusService = mock(BasWrkStatusService.class); when(basWrkStatusService.getById(org.mockito.ArgumentMatchers.any())).thenReturn(null); WrkAnalysisServiceImpl service = new WrkAnalysisServiceImpl( mock(WrkMastLogService.class), mock(BasCrnpErrLogService.class), mock(BasDualCrnpErrLogService.class), mock(BasRgvErrLogService.class), mock(BasStationService.class), basWrkStatusService, mock(WrkMastService.class) ); Map result = ReflectionTestUtils.invokeMethod( service, "buildAnalysisResult", Arrays.asList( analysis(1001, date("2026-03-27 13:00:00"), date("2026-03-27 13:10:00"), 600_000L), analysis(1002, date("2026-03-27 13:15:00"), date("2026-03-27 13:30:00"), 900_000L) ), "finish_time" ); Map summary = (Map) result.get("summary"); assertEquals(4.0d, ((Number) summary.get("avgTaskPerHour")).doubleValue(), 0.0001d); } private WrkAnalysis analysis(int wrkNo, Date appeTime, Date finishTime, long totalDurationMs) { WrkAnalysis item = new WrkAnalysis(); item.setWrkNo(wrkNo); item.setAppeTime(appeTime); item.setFinishTime(finishTime); item.setTotalDurationMs(totalDurationMs); item.setFinalWrkSts(80L); item.setMetricCompleteness("COMPLETE"); return item; } private Date date(String value) { try { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value); } catch (ParseException e) { throw new IllegalArgumentException(e); } } }