智慧水务管理系统 - 精河县供水工程综合管理平台

WaterQualityServiceTest.java 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. package com.waterquality.service;
  2. import com.waterquality.entity.WaterQualityStation;
  3. import com.waterquality.repository.WaterQualityStationRepository;
  4. import org.junit.jupiter.api.BeforeEach;
  5. import org.junit.jupiter.api.Test;
  6. import org.junit.jupiter.api.extension.ExtendWith;
  7. import org.mockito.InjectMocks;
  8. import org.mockito.Mock;
  9. import org.mockito.junit.jupiter.MockitoExtension;
  10. import java.time.LocalDateTime;
  11. import java.util.Arrays;
  12. import java.util.List;
  13. import java.util.Optional;
  14. import static org.junit.jupiter.api.Assertions.*;
  15. import static org.mockito.ArgumentMatchers.any;
  16. import static org.mockito.Mockito.*;
  17. @ExtendWith(MockitoExtension.class)
  18. public class WaterQualityServiceTest {
  19. @Mock
  20. private WaterQualityStationRepository stationRepository;
  21. @InjectMocks
  22. private WaterQualityServiceImpl waterQualityService;
  23. private WaterQualityStation station;
  24. @BeforeEach
  25. void setUp() {
  26. station = new WaterQualityStation();
  27. station.setId(1L);
  28. station.setStationName("测试站点");
  29. station.setLocation("精河县");
  30. station.setStationType("WQ-01");
  31. station.setDescription("测试站点描述");
  32. station.setIsActive(true);
  33. station.setCreatedAt(LocalDateTime.now());
  34. station.setUpdatedAt(LocalDateTime.now());
  35. }
  36. @Test
  37. void createStation_ShouldCreateSuccessfully() {
  38. when(stationRepository.save(any(WaterQualityStation.class))).thenReturn(station);
  39. WaterQualityStation result = waterQualityService.createStation(station);
  40. assertNotNull(result);
  41. assertEquals("测试站点", result.getStationName());
  42. verify(stationRepository, times(1)).save(any(WaterQualityStation.class));
  43. }
  44. @Test
  45. void createStation_ShouldThrowExceptionWhenStationTypeIsNull() {
  46. station.setStationType(null);
  47. IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> {
  48. waterQualityService.createStation(station);
  49. });
  50. assertEquals("Station type is required", exception.getMessage());
  51. verify(stationRepository, never()).save(any(WaterQualityStation.class));
  52. }
  53. @Test
  54. void updateStation_ShouldUpdateSuccessfully() {
  55. when(stationRepository.findById(1L)).thenReturn(Optional.of(station));
  56. when(stationRepository.save(any(WaterQualityStation.class))).thenReturn(station);
  57. station.setStationName("更新后的站点名称");
  58. WaterQualityStation result = waterQualityService.updateStation(1L, station);
  59. assertNotNull(result);
  60. assertEquals("更新后的站点名称", result.getStationName());
  61. verify(stationRepository, times(1)).findById(1L);
  62. verify(stationRepository, times(1)).save(any(WaterQualityStation.class));
  63. }
  64. @Test
  65. void updateStation_ShouldThrowExceptionWhenStationNotFound() {
  66. when(stationRepository.findById(1L)).thenReturn(Optional.empty());
  67. RuntimeException exception = assertThrows(RuntimeException.class, () -> {
  68. waterQualityService.updateStation(1L, station);
  69. });
  70. assertEquals("Station not found: 1", exception.getMessage());
  71. verify(stationRepository, times(1)).findById(1L);
  72. verify(stationRepository, never()).save(any(WaterQualityStation.class));
  73. }
  74. @Test
  75. void deleteStation_ShouldDeleteSuccessfully() {
  76. when(stationRepository.findById(1L)).thenReturn(Optional.of(station));
  77. waterQualityService.deleteStation(1L);
  78. assertFalse(station.getIsActive());
  79. verify(stationRepository, times(1)).findById(1L);
  80. verify(stationRepository, times(1)).save(any(WaterQualityStation.class));
  81. }
  82. @Test
  83. void getAllActiveStations_ShouldReturnActiveStations() {
  84. List<WaterQualityStation> activeStations = Arrays.asList(station);
  85. when(stationRepository.findByIsActiveTrue()).thenReturn(activeStations);
  86. List<WaterQualityStation> result = waterQualityService.getAllActiveStations();
  87. assertEquals(1, result.size());
  88. assertEquals("测试站点", result.get(0).getStationName());
  89. verify(stationRepository, times(1)).findByIsActiveTrue();
  90. }
  91. @Test
  92. void getStationsByType_ShouldReturnStationsByType() {
  93. when(stationRepository.findByStationType("WQ-01")).thenReturn(Arrays.asList(station));
  94. List<WaterQualityStation> result = waterQualityService.getStationsByType("WQ-01");
  95. assertEquals(1, result.size());
  96. assertEquals("WQ-01", result.get(0).getStationType());
  97. verify(stationRepository, times(1)).findByStationType("WQ-01");
  98. }
  99. @Test
  100. void getStationById_ShouldReturnStation() {
  101. when(stationRepository.findById(1L)).thenReturn(Optional.of(station));
  102. WaterQualityStation result = waterQualityService.getStationById(1L);
  103. assertNotNull(result);
  104. assertEquals("测试站点", result.getStationName());
  105. verify(stationRepository, times(1)).findById(1L);
  106. }
  107. @Test
  108. void getStationById_ShouldThrowExceptionWhenNotFound() {
  109. when(stationRepository.findById(1L)).thenReturn(Optional.empty());
  110. RuntimeException exception = assertThrows(RuntimeException.class, () -> {
  111. waterQualityService.getStationById(1L);
  112. });
  113. assertEquals("Station not found: 1", exception.getMessage());
  114. verify(stationRepository, times(1)).findById(1L);
  115. }
  116. @Test
  117. void searchStations_ShouldReturnStationsByLocation() {
  118. when(stationRepository.findByLocationContaining("精河")).thenReturn(Arrays.asList(station));
  119. List<WaterQualityStation> result = waterQualityService.searchStations("精河");
  120. assertEquals(1, result.size());
  121. assertEquals("精河县", result.get(0).getLocation());
  122. verify(stationRepository, times(1)).findByLocationContaining("精河");
  123. }
  124. }