Index: ssts-basedata/src/test/java/com/forgon/disinfectsystem/basedatamanager/sterilizer/service/SterilizerManagerImplParseSterilizationFrequencyRemindsTest.java =================================================================== diff -u --- ssts-basedata/src/test/java/com/forgon/disinfectsystem/basedatamanager/sterilizer/service/SterilizerManagerImplParseSterilizationFrequencyRemindsTest.java (revision 0) +++ ssts-basedata/src/test/java/com/forgon/disinfectsystem/basedatamanager/sterilizer/service/SterilizerManagerImplParseSterilizationFrequencyRemindsTest.java (revision 41339) @@ -0,0 +1,108 @@ +package com.forgon.disinfectsystem.basedatamanager.sterilizer.service; + +import com.forgon.disinfectsystem.entity.basedatamanager.sterilisation.Sterilisation; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.SterilizationFrequecyRemind; +import com.forgon.tools.hibernate.ObjectDao; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * SterilizerManagerImpl#parseSterilizationFrequencyReminds 的单元测试类 + */ +public class SterilizerManagerImplParseSterilizationFrequencyRemindsTest { + + // 被测类实例 + @InjectMocks + private SterilizerManagerImpl sterilizerManager; + + // Mock 对象 + @Mock + private ObjectDao objectDao; + private AutoCloseable autoCloseable; + + @Before + public void setUp() { + autoCloseable = MockitoAnnotations.openMocks(this); + } + + @After + public void tearDown() throws Exception { + autoCloseable.close(); + } + + /** + * 测试正常输入的情况 + */ + @Test + public void testParseSterilizationFrequencyReminds_NormalInput_ReturnsCorrectList() { + // 准备输入数据 + String inputJson = "[{\"dateType\":1,\"frequency\":2,\"remindMode\":\"强制提醒\",\"sterilisation_id\":10}]"; + + // 创建 mock 返回的对象 + Sterilisation mockSterilisation = new Sterilisation(); + when(objectDao.getById(Sterilisation.class.getSimpleName(), 10L)).thenReturn(mockSterilisation); + + // 执行方法 + List result = sterilizerManager.parseSterilizationFrequencyReminds(inputJson); + + // 断言验证 + assertNotNull(result); + assertEquals(1, result.size()); + SterilizationFrequecyRemind remind = result.get(0); +// assertEquals(Integer.valueOf(1), remind.getDateType()); + assertEquals(Integer.valueOf(2), remind.getFrequency()); + assertEquals("强制提醒", remind.getRemindMode()); + assertSame(mockSterilisation, remind.getSterilisation()); + + verify(objectDao).getById(Sterilisation.class.getSimpleName(), 10L); + } + + /** + * 测试空数组输入的情况 + */ + @Test + public void testParseSterilizationFrequencyReminds_EmptyArray_ReturnsEmptyList() { + String inputJson = "[]"; + List result = sterilizerManager.parseSterilizationFrequencyReminds(inputJson); + assertNotNull(result); + assertTrue(result.isEmpty()); + verifyNoInteractions(objectDao); // 没有任何交互发生 + } + + /** + * 测试无效字段输入的情况(部分缺失) + */ + @Test + public void testParseSterilizationFrequencyReminds_InvalidFields_DefaultValuesUsed() { + String inputJson = "[{\"invalidField\":true}]"; + List result = sterilizerManager.parseSterilizationFrequencyReminds(inputJson); + assertNotNull(result); + assertEquals(1, result.size()); + SterilizationFrequecyRemind remind = result.get(0); +// assertEquals(0, remind.getDateType()); // 默认 0 + assertEquals(0, remind.getFrequency()); // 默认 0 + assertEquals("", remind.getRemindMode()); // 默认值 + assertNull(remind.getSterilisation()); // 未调用 getById + verify(objectDao).getById(Sterilisation.class.getSimpleName(), 0L); + } + + /** + * 测试非法 JSON 格式导致异常抛出的情况 + */ + @Test + public void testParseSterilizationFrequencyReminds_IllegalJsonFormat_ThrowsException() { + String invalidJson = "{ invalid json }"; + assertThrows(Exception.class, () -> { + sterilizerManager.parseSterilizationFrequencyReminds(invalidJson); + }); + } +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizer/service/SterilizerManagerImpl.java =================================================================== diff -u -r33037 -r41339 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizer/service/SterilizerManagerImpl.java (.../SterilizerManagerImpl.java) (revision 33037) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizer/service/SterilizerManagerImpl.java (.../SterilizerManagerImpl.java) (revision 41339) @@ -299,18 +299,7 @@ // 按炉次提醒的灭菌程序 if(StringUtils.isNotBlank(sterilizationFrequecyReminds)){ List originalList = sterilizer.getSterilizationFrequecyReminds(); - List sterilizationFrequecyRemindList = new ArrayList(); - JSONArray jsonArr = JSONArray.fromObject(sterilizationFrequecyReminds); - for(int i=0;i sterilizationFrequecyRemindList = parseSterilizationFrequencyReminds(sterilizationFrequecyReminds); sterilizer.setSterilizationFrequecyReminds(sterilizationFrequecyRemindList); objectDao.deleteAll(originalList); } @@ -322,6 +311,22 @@ } } + List parseSterilizationFrequencyReminds(String sterilizationFrequencyReminds) { + List sterilizationFrequecyRemindList = new ArrayList<>(); + JSONArray jsonArr = JSONArray.fromObject(sterilizationFrequencyReminds); + for(int i=0;i orderMap) { List sterilizerList = this.getAllSterilizer();