Когда я клонирую ваш проект и запускаю тест, я также вижу NPE, ...
java.lang.IllegalStateException: Failed to execute ApplicationRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:778) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
(...)
Caused by: java.lang.NullPointerException: null
at robot.controller.impl.RaspberryPiInputImpl.addListener(RaspberryPiInputImpl.java:19) ~[main/:na]
at robot.sensor.AbstractSensor.init(AbstractSensor.java:21) ~[main/:na]
at robot.TwoWheelRobot.init(TwoWheelRobot.java:20) ~[main/:na]
at robot.RoboApplication.run(RoboApplication.java:26) ~[main/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:775) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
... 61 common frames omitted
... но не в вашем тесте, а в этого класса :
package robot.controller.impl;
import com.pi4j.io.gpio.GpioPinDigitalInput;
import com.pi4j.io.gpio.event.GpioPinListenerDigital;
import lombok.RequiredArgsConstructor;
import robot.controller.Input;
import robot.controller.Listener;
@RequiredArgsConstructor
public class RaspberryPiInputImpl implements Input {
private final GpioPinDigitalInput gpioPinDigitalInput;
@Override
public void addListener(Listener listener) {
GpioPinListenerDigital gpioListener = (GpioPinListenerDigital) listener;
gpioPinDigitalInput.addListener(gpioListener);
}
}
У вас есть последнее поле GpioPinDigitalInput
, которое никогда не инициализируется, т.е. оно всегда будет null
. Так что же еще, кроме NPE, вы ожидаете при вызове addListener(..)
? Возможно, вам следует ввести туда значение ...
Кроме того, мне пришлось перенести тест с src /gration-test на src / test , иначе Gradle будет не запускайте его, и IntelliJ IDEA также не распознает его как тестовый класс.