Quite often you have a nested call chain to get a result in Java. Mocking these in a test is a little different than mocking just one call. I’m here going to show a solution to that.
Say you have the following call chain to create a transacted session for a JMS connection:
Session session =
connectionFactory.createConnection()
.createSession(Session.SESSION_TRANSACTED);
To mock these calls we have to break them apart and mock them one by one
...
public MyTestClass {
@Mock
private Session session;
@Mock
private ConnectionFactory connectionFactory;
@Mock
private Connection mockedConnection;
@BeforeMethod
public void setUp() throws JMSException {
MockitoAnnotations.initMocks(this);
Mockito.when(connectionFactory.createConnection())
.thenReturn(mockedConnection);
Mockito.when(mockedConnection.createSession(
Session.SESSION_TRANSACTED))
.thenReturn(session);
}
...
We are now ready to create all our tests 🙂
Tested on Java v1.8.0_252, Mockito v3.3.3, Spring Boot v2.2.4 and TestNG v6.11
Comments are closed.