Я работаю через https://github.com/spring-guides/gs-messaging-stomp-websocket. У меня это работает и модульный тест проходит. Поэтому я решил изменить ввод и вывод подписанной функции с POJO на Strings. Я тоже изменил javascript. Это работает, когда я запускаю код.
Но модульный тест не проходит. Он вызывает getPayloadType и функцию, но frameHandler не вызывается.
Вот некоторые фрагменты кода
Проверка кода моих изменений в BOLD )
StompSessionHandler handler = new TestSessionHandler(failure) {
@Override
public void afterConnected(final StompSession session, StompHeaders connectedHeaders) {
session.subscribe("/topic/greetings", new StompFrameHandler() {
@Override
public Type getPayloadType(StompHeaders headers) {
System.out.println("DEBUG: into getPayloadType");
**return String.class;**
}
@Override
public void handleFrame(StompHeaders headers, Object payload) {
System.out.println("DEBUG: into handleFrame");
**String greeting = (String) payload.toString();**
System.out.println("DEBUG: greeting is " + greeting);
try {
assertEquals("Hello, Spring!", greeting);
} catch (Throwable t) {
failure.set(t);
} finally {
session.disconnect();
latch.countDown();
}
}
});
try {
session.send("/app/hello", "Spring");
} catch (Throwable t) {
failure.set(t);
latch.countDown();
}
}
};
System.out.println("DEBUG: calling connect");
this.stompClient.connect("ws://localhost:{port}/gs-guide-websocket", this.headers, handler, this.port);
System.out.println("DEBUG: back from connect");
if (latch.await(3, TimeUnit.SECONDS)) {
if (failure.get() != null) {
throw new AssertionError("", failure.get());
}
}
else {
fail("DEBUG: Greeting not received");
}
Код функции
@Controller
public class GreetingController {
String storedMessage;
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public String greeting(String message) throws Exception {
System.out.println("DEBUG: message is " + message);
Thread.sleep(1000); // simulated delay
System.out.println("DEBUG: about to return from greeting " + message);
return "Hello, " + message + "!";
}
@GetMapping("/test")
public String testThis(){
return "test";
}
}
И вывод mvn clean install (только бит ключа!)
2020-04-23 19:25:53.975 INFO 6711 --- [ main] c.e.m.GreetingIntegrationTests : Started GreetingIntegrationTests in 8.004 seconds (JVM running for 10.983)
DEBUG: calling connect
2020-04-23 19:25:54.972 INFO 6711 --- [o-auto-1-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-04-23 19:25:54.979 INFO 6711 --- [o-auto-1-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-04-23 19:25:55.030 INFO 6711 --- [o-auto-1-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 49 ms
DEBUG: back from connect
DEBUG: message is Spring
DEBUG: about to return from greeting Spring
DEBUG: into getPayloadType
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 13.795 s <<< FAILURE! - in com.example.messagingstompwebsocket.GreetingIntegrationTests
[ERROR] getGreeting Time elapsed: 4.226 s <<< FAILURE!
org.opentest4j.AssertionFailedError: DEBUG: Greeting not received
at com.example.messagingstompwebsocket.GreetingIntegrationTests.getGreeting(GreetingIntegrationTests.java:102)
Этот вопрос был поднят несколько лет go, но не был принят ответ. Любые идеи, что я сделал не так. Просто повторюсь, фактическое использование кода работает.
С уважением,