Anonymous
Die Java Swing-GUI wird nach dem Zurücksetzen der Sensoren im Sicherheitssystemprojekt nicht aktualisiert
Post
by Anonymous » 12 Jan 2026, 00:10
Ich arbeite an einem Java Swing-Projekt (Udacity UdaSecurity). Geben Sie hier eine Bildbeschreibung ein. Kann mir bitte jemand helfen, dieses
Problem so schnell wie möglich zu beheben? Wenn irgendwelche Dateien benötigt werden, werde ich sie teilen. //securityservicetest.java
Code: Select all
package com.udacity.catpoint.service;
import com.udacity.catpoint.data.*;
import com.udacity.catpoint.image.ImageService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.awt.image.BufferedImage;
import java.util.HashSet;
import java.util.Set;
import static org.mockito.Mockito.*;
public class SecurityServiceTest {
@Mock
private SecurityRepository securityRepository;
@Mock
private ImageService imageService;
private SecurityService securityService;
@BeforeEach
void setup() {
MockitoAnnotations.openMocks(this);
securityService = new SecurityService(securityRepository, imageService);
}
@Test
void whenSystemArmedAndSensorActivated_alarmBecomesPending() {
Sensor sensor = new Sensor("S1", SensorType.DOOR);
when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_AWAY);
when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.NO_ALARM);
securityService.changeSensorActivationStatus(sensor, true);
verify(securityRepository).setAlarmStatus(AlarmStatus.PENDING_ALARM);
}
@Test
void whenPendingAlarmAndAnotherSensorActivated_alarmBecomesAlarm() {
Sensor sensor = new Sensor("S1", SensorType.DOOR);
when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_AWAY);
when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.PENDING_ALARM);
securityService.changeSensorActivationStatus(sensor, true);
verify(securityRepository).setAlarmStatus(AlarmStatus.ALARM);
}
@Test
void whenSensorDeactivatedAndAlarmPending_alarmBecomesNoAlarm() {
Sensor sensor = new Sensor("S1", SensorType.DOOR);
sensor.setActive(true);
when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.PENDING_ALARM);
securityService.changeSensorActivationStatus(sensor, false);
verify(securityRepository).setAlarmStatus(AlarmStatus.NO_ALARM);
}
@Test
void whenAlarmAlreadyActive_sensorChangeDoesNotAffectAlarm() {
Sensor sensor = new Sensor("S1", SensorType.DOOR);
when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.ALARM);
securityService.changeSensorActivationStatus(sensor, true);
verify(securityRepository, never()).setAlarmStatus(any());
}
@Test
void whenAlarmActive_newSensorActivated_alarmStaysAlarm() {
when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.ALARM);
Sensor sensor = new Sensor("S2", SensorType.WINDOW);
securityService.changeSensorActivationStatus(sensor, true);
verify(securityRepository, never()).setAlarmStatus(any());
}
@Test
void whenAlarmActive_sensorDeactivated_alarmStaysAlarm() {
when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.ALARM);
Sensor sensor = new Sensor("S1", SensorType.DOOR);
sensor.setActive(true);
securityService.changeSensorActivationStatus(sensor, false);
verify(securityRepository, never()).setAlarmStatus(any());
}
@Test
void whenCatDetected_andArmedHome_alarmStaysAlarmRegardlessOfSensors() {
when(imageService.imageContainsCat(any(), anyFloat())).thenReturn(true);
when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_HOME);
securityService.processImage(mock(BufferedImage.class));
verify(securityRepository).setAlarmStatus(AlarmStatus.ALARM);
}
@Test
void whenNoCatDetectedAndSensorsInactive_alarmBecomesNoAlarm() {
when(imageService.imageContainsCat(any(), anyFloat())).thenReturn(false);
when(securityRepository.getSensors()).thenReturn(new HashSet());
securityService.processImage(mock(BufferedImage.class));
verify(securityRepository).setAlarmStatus(AlarmStatus.NO_ALARM);
}
@Test
void whenSystemDisarmed_alarmIsSetToNoAlarm() {
securityService.setArmingStatus(ArmingStatus.DISARMED);
verify(securityRepository).setAlarmStatus(AlarmStatus.NO_ALARM);
}
@ParameterizedTest
@EnumSource(value = ArmingStatus.class, names = {"ARMED_HOME", "ARMED_AWAY"})
void whenSystemArmed_allSensorsAreResetToInactive(ArmingStatus status) {
Set sensors = new HashSet();
Sensor s1 = new Sensor("S1", SensorType.DOOR);
s1.setActive(true);
sensors.add(s1);
when(securityRepository.getSensors()).thenReturn(sensors);
securityService.setArmingStatus(status);
sensors.forEach(s -> {
assert !s.getActive();
});
}
@Test
void whenArmedHomeAndCatDetected_verifyAlarmStatus() {
when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_HOME);
when(imageService.imageContainsCat(any(), anyFloat())).thenReturn(true);
securityService.processImage(mock(BufferedImage.class));
verify(securityRepository).setAlarmStatus(AlarmStatus.ALARM);
}
@ParameterizedTest
@EnumSource(AlarmStatus.class)
void whenInactiveSensorDeactivated_alarmStateNeverChanges(AlarmStatus status) {
Sensor sensor = new Sensor("S1", SensorType.DOOR);
sensor.setActive(false);
when(securityRepository.getAlarmStatus()).thenReturn(status);
securityService.changeSensorActivationStatus(sensor, false);
verify(securityRepository, never()).setAlarmStatus(any());
}
}
Code: Select all
package com.udacity.catpoint.service;
import com.udacity.catpoint.application.StatusListener;
import com.udacity.catpoint.data.AlarmStatus;
import com.udacity.catpoint.data.ArmingStatus;
import com.udacity.catpoint.data.SecurityRepository;
import com.udacity.catpoint.data.Sensor;
import com.udacity.catpoint.image.ImageService;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SecurityService {
private final SecurityRepository securityRepository;
private final ImageService imageService;
private final Set statusListeners = new HashSet();
public SecurityService(SecurityRepository securityRepository, ImageService imageService) {
this.securityRepository = securityRepository;
this.imageService = imageService;
}
public void setArmingStatus(ArmingStatus armingStatus) {
if (armingStatus == ArmingStatus.DISARMED) {
setAlarmStatus(AlarmStatus.NO_ALARM);
} else {
// Requirement 10: Reset all sensors to inactive without crashing
List sensors = new ArrayList(securityRepository.getSensors());
sensors.forEach(sensor -> {
sensor.setActive(false);
securityRepository.updateSensor(sensor);
});
}
securityRepository.setArmingStatus(armingStatus);
}
public void changeSensorActivationStatus(Sensor sensor, Boolean active) {
if (securityRepository.getAlarmStatus() != AlarmStatus.ALARM) {
if (active) {
handleSensorActivated();
} else if (sensor.getActive() && !active) {
handleSensorDeactivated();
}
}
sensor.setActive(active);
securityRepository.updateSensor(sensor);
}
private void handleSensorActivated() {
if (securityRepository.getArmingStatus() == ArmingStatus.DISARMED) return;
AlarmStatus currentStatus = securityRepository.getAlarmStatus();
if (currentStatus == AlarmStatus.NO_ALARM) {
setAlarmStatus(AlarmStatus.PENDING_ALARM);
} else if (currentStatus == AlarmStatus.PENDING_ALARM) {
setAlarmStatus(AlarmStatus.ALARM);
}
}
private void handleSensorDeactivated() {
if (securityRepository.getAlarmStatus() == AlarmStatus.PENDING_ALARM) {
setAlarmStatus(AlarmStatus.NO_ALARM);
}
}
public void processImage(BufferedImage image) {
boolean catDetected = imageService.imageContainsCat(image, 50.0f);
// Requirement 11: Set alarm if cat detected while ANY Armed state is active
if (catDetected && (getArmingStatus() == ArmingStatus.ARMED_HOME || getArmingStatus() == ArmingStatus.ARMED_AWAY)) {
setAlarmStatus(AlarmStatus.ALARM);
}
// Requirement 9: Reset to no alarm if no cat and sensors are off
else if (!catDetected && allSensorsInactive()) {
setAlarmStatus(AlarmStatus.NO_ALARM);
}
statusListeners.forEach(listener -> listener.catDetected(catDetected));
}
private boolean allSensorsInactive() {
return securityRepository.getSensors().stream().noneMatch(Sensor::getActive);
}
public void setAlarmStatus(AlarmStatus status) {
securityRepository.setAlarmStatus(status);
statusListeners.forEach(listener -> listener.notify(status));
}
public ArmingStatus getArmingStatus() { return securityRepository.getArmingStatus(); }
public AlarmStatus getAlarmStatus() { return securityRepository.getAlarmStatus(); }
public void addStatusListener(StatusListener listener) { statusListeners.add(listener); }
public void removeStatusListener(StatusListener listener) { statusListeners.remove(listener); }
public Set getSensors() { return securityRepository.getSensors(); }
public void addSensor(Sensor sensor) { securityRepository.addSensor(sensor); }
public void removeSensor(Sensor sensor) { securityRepository.removeSensor(sensor); }
}
1768173058
Anonymous
Ich arbeite an einem Java Swing-Projekt (Udacity UdaSecurity). Geben Sie hier eine Bildbeschreibung ein. Kann mir bitte jemand helfen, dieses [url=viewtopic.php?t=26065]Problem[/url] so schnell wie möglich zu beheben? Wenn irgendwelche Dateien benötigt werden, werde ich sie teilen. //securityservicetest.java [code]package com.udacity.catpoint.service; import com.udacity.catpoint.data.*; import com.udacity.catpoint.image.ImageService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.awt.image.BufferedImage; import java.util.HashSet; import java.util.Set; import static org.mockito.Mockito.*; public class SecurityServiceTest { @Mock private SecurityRepository securityRepository; @Mock private ImageService imageService; private SecurityService securityService; @BeforeEach void setup() { MockitoAnnotations.openMocks(this); securityService = new SecurityService(securityRepository, imageService); } @Test void whenSystemArmedAndSensorActivated_alarmBecomesPending() { Sensor sensor = new Sensor("S1", SensorType.DOOR); when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_AWAY); when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.NO_ALARM); securityService.changeSensorActivationStatus(sensor, true); verify(securityRepository).setAlarmStatus(AlarmStatus.PENDING_ALARM); } @Test void whenPendingAlarmAndAnotherSensorActivated_alarmBecomesAlarm() { Sensor sensor = new Sensor("S1", SensorType.DOOR); when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_AWAY); when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.PENDING_ALARM); securityService.changeSensorActivationStatus(sensor, true); verify(securityRepository).setAlarmStatus(AlarmStatus.ALARM); } @Test void whenSensorDeactivatedAndAlarmPending_alarmBecomesNoAlarm() { Sensor sensor = new Sensor("S1", SensorType.DOOR); sensor.setActive(true); when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.PENDING_ALARM); securityService.changeSensorActivationStatus(sensor, false); verify(securityRepository).setAlarmStatus(AlarmStatus.NO_ALARM); } @Test void whenAlarmAlreadyActive_sensorChangeDoesNotAffectAlarm() { Sensor sensor = new Sensor("S1", SensorType.DOOR); when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.ALARM); securityService.changeSensorActivationStatus(sensor, true); verify(securityRepository, never()).setAlarmStatus(any()); } @Test void whenAlarmActive_newSensorActivated_alarmStaysAlarm() { when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.ALARM); Sensor sensor = new Sensor("S2", SensorType.WINDOW); securityService.changeSensorActivationStatus(sensor, true); verify(securityRepository, never()).setAlarmStatus(any()); } @Test void whenAlarmActive_sensorDeactivated_alarmStaysAlarm() { when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.ALARM); Sensor sensor = new Sensor("S1", SensorType.DOOR); sensor.setActive(true); securityService.changeSensorActivationStatus(sensor, false); verify(securityRepository, never()).setAlarmStatus(any()); } @Test void whenCatDetected_andArmedHome_alarmStaysAlarmRegardlessOfSensors() { when(imageService.imageContainsCat(any(), anyFloat())).thenReturn(true); when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_HOME); securityService.processImage(mock(BufferedImage.class)); verify(securityRepository).setAlarmStatus(AlarmStatus.ALARM); } @Test void whenNoCatDetectedAndSensorsInactive_alarmBecomesNoAlarm() { when(imageService.imageContainsCat(any(), anyFloat())).thenReturn(false); when(securityRepository.getSensors()).thenReturn(new HashSet()); securityService.processImage(mock(BufferedImage.class)); verify(securityRepository).setAlarmStatus(AlarmStatus.NO_ALARM); } @Test void whenSystemDisarmed_alarmIsSetToNoAlarm() { securityService.setArmingStatus(ArmingStatus.DISARMED); verify(securityRepository).setAlarmStatus(AlarmStatus.NO_ALARM); } @ParameterizedTest @EnumSource(value = ArmingStatus.class, names = {"ARMED_HOME", "ARMED_AWAY"}) void whenSystemArmed_allSensorsAreResetToInactive(ArmingStatus status) { Set sensors = new HashSet(); Sensor s1 = new Sensor("S1", SensorType.DOOR); s1.setActive(true); sensors.add(s1); when(securityRepository.getSensors()).thenReturn(sensors); securityService.setArmingStatus(status); sensors.forEach(s -> { assert !s.getActive(); }); } @Test void whenArmedHomeAndCatDetected_verifyAlarmStatus() { when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_HOME); when(imageService.imageContainsCat(any(), anyFloat())).thenReturn(true); securityService.processImage(mock(BufferedImage.class)); verify(securityRepository).setAlarmStatus(AlarmStatus.ALARM); } @ParameterizedTest @EnumSource(AlarmStatus.class) void whenInactiveSensorDeactivated_alarmStateNeverChanges(AlarmStatus status) { Sensor sensor = new Sensor("S1", SensorType.DOOR); sensor.setActive(false); when(securityRepository.getAlarmStatus()).thenReturn(status); securityService.changeSensorActivationStatus(sensor, false); verify(securityRepository, never()).setAlarmStatus(any()); } } [/code] [code] //securityservice.java [/code] [code]package com.udacity.catpoint.service; import com.udacity.catpoint.application.StatusListener; import com.udacity.catpoint.data.AlarmStatus; import com.udacity.catpoint.data.ArmingStatus; import com.udacity.catpoint.data.SecurityRepository; import com.udacity.catpoint.data.Sensor; import com.udacity.catpoint.image.ImageService; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class SecurityService { private final SecurityRepository securityRepository; private final ImageService imageService; private final Set statusListeners = new HashSet(); public SecurityService(SecurityRepository securityRepository, ImageService imageService) { this.securityRepository = securityRepository; this.imageService = imageService; } public void setArmingStatus(ArmingStatus armingStatus) { if (armingStatus == ArmingStatus.DISARMED) { setAlarmStatus(AlarmStatus.NO_ALARM); } else { // Requirement 10: Reset all sensors to inactive without crashing List sensors = new ArrayList(securityRepository.getSensors()); sensors.forEach(sensor -> { sensor.setActive(false); securityRepository.updateSensor(sensor); }); } securityRepository.setArmingStatus(armingStatus); } public void changeSensorActivationStatus(Sensor sensor, Boolean active) { if (securityRepository.getAlarmStatus() != AlarmStatus.ALARM) { if (active) { handleSensorActivated(); } else if (sensor.getActive() && !active) { handleSensorDeactivated(); } } sensor.setActive(active); securityRepository.updateSensor(sensor); } private void handleSensorActivated() { if (securityRepository.getArmingStatus() == ArmingStatus.DISARMED) return; AlarmStatus currentStatus = securityRepository.getAlarmStatus(); if (currentStatus == AlarmStatus.NO_ALARM) { setAlarmStatus(AlarmStatus.PENDING_ALARM); } else if (currentStatus == AlarmStatus.PENDING_ALARM) { setAlarmStatus(AlarmStatus.ALARM); } } private void handleSensorDeactivated() { if (securityRepository.getAlarmStatus() == AlarmStatus.PENDING_ALARM) { setAlarmStatus(AlarmStatus.NO_ALARM); } } public void processImage(BufferedImage image) { boolean catDetected = imageService.imageContainsCat(image, 50.0f); // Requirement 11: Set alarm if cat detected while ANY Armed state is active if (catDetected && (getArmingStatus() == ArmingStatus.ARMED_HOME || getArmingStatus() == ArmingStatus.ARMED_AWAY)) { setAlarmStatus(AlarmStatus.ALARM); } // Requirement 9: Reset to no alarm if no cat and sensors are off else if (!catDetected && allSensorsInactive()) { setAlarmStatus(AlarmStatus.NO_ALARM); } statusListeners.forEach(listener -> listener.catDetected(catDetected)); } private boolean allSensorsInactive() { return securityRepository.getSensors().stream().noneMatch(Sensor::getActive); } public void setAlarmStatus(AlarmStatus status) { securityRepository.setAlarmStatus(status); statusListeners.forEach(listener -> listener.notify(status)); } public ArmingStatus getArmingStatus() { return securityRepository.getArmingStatus(); } public AlarmStatus getAlarmStatus() { return securityRepository.getAlarmStatus(); } public void addStatusListener(StatusListener listener) { statusListeners.add(listener); } public void removeStatusListener(StatusListener listener) { statusListeners.remove(listener); } public Set getSensors() { return securityRepository.getSensors(); } public void addSensor(Sensor sensor) { securityRepository.addSensor(sensor); } public void removeSensor(Sensor sensor) { securityRepository.removeSensor(sensor); } } [/code]