package com.gbg.activate.video.service; import com.gbg.activate.video.config.ImageSdkParams; import com.gbg.activate.video.entity.VideoSigningDownloadRecordDO; import com.gbg.activate.video.mapper.VideoSigningDownloadRecordMapper; import com.gbg.activate.video.service.ClearExpiredFileServiceImpl; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.ArrayList; import java.util.List; import static org.mockito.Mockito.*; public class ClearExpiredFileServiceImplTest { private ClearExpiredFileServiceImpl service; private ImageSdkParams params; private VideoSigningDownloadRecordMapper recordMapper; @BeforeEach public void setUp() { service = new ClearExpiredFileServiceImpl(); params = mock(ImageSdkParams.class); recordMapper = mock(VideoSigningDownloadRecordMapper.class); // 通过反射注入 mock 对象 try { java.lang.reflect.Field paramsField = ClearExpiredFileServiceImpl.class.getDeclaredField("params"); paramsField.setAccessible(true); paramsField.set(service, params); java.lang.reflect.Field mapperField = ClearExpiredFileServiceImpl.class.getDeclaredField("recordMapper"); mapperField.setAccessible(true); mapperField.set(service, recordMapper); } catch (Exception e) { throw new RuntimeException(e); } } @Test public void testClearExpiredFilesWithNoRecords() { when(params.getValidDays()).thenReturn(30); when(recordMapper.listExpiredRecords(30)).thenReturn(new ArrayList<>()); service.clearExpiredFiles(); verify(recordMapper, times(1)).listExpiredRecords(30); } @Test public void testClearExpiredFilesWithRecords() { when(params.getValidDays()).thenReturn(30); when(params.getFileSavePath()).thenReturn("/tmp"); List records = new ArrayList<>(); VideoSigningDownloadRecordDO record = new VideoSigningDownloadRecordDO(); record.setApplicationNumber("APP001"); record.setImageId("IMG001"); record.setImageName("test.mp4"); records.add(record); when(recordMapper.listExpiredRecords(30)).thenReturn(records); service.clearExpiredFiles(); verify(recordMapper, times(1)).listExpiredRecords(30); verify(recordMapper, times(1)).deleteByPrimaryKey("APP001", "IMG001"); } @Test public void testClearExpiredFilesWithError() { when(params.getValidDays()).thenReturn(30); when(params.getFileSavePath()).thenReturn(null); // 这将导致异常 List records = new ArrayList<>(); VideoSigningDownloadRecordDO record = new VideoSigningDownloadRecordDO(); record.setApplicationNumber("APP001"); record.setImageId("IMG001"); record.setImageName("test.mp4"); records.add(record); when(recordMapper.listExpiredRecords(30)).thenReturn(records); service.clearExpiredFiles(); verify(recordMapper, times(1)).listExpiredRecords(30); } }