0

In the application I'm working now, I need to implement a few tests and build upon them. I've been reading and trying out a few things, but haven't had much success.

The goal is to start back-filling with tests the service layer of the application. The first one to be covered is UserService.

So, my idea is to assert the test user we use on the application returns itself. The test class so far is:

@RunWith(MockitoJUnitRunner.class)
@SpringBootTest(classes = {ApplicationMain.class})
public class UserServiceTest {

    @Mock
    CentralData dataProviderMock;

    @InjectMocks
    private UserService userService;

    private <project>User testUser;
    private <project>User mockUser;

    @Before
    public void init() {
        MockitoAnnotations.initMocks(CentralData.class);
        System.out.println("dataProviderMock: " + dataProviderMock);
        System.out.println("userService: " + userService);
        userService = new UserService(dataProviderMock);
        testUser = createTestUser();
    }

    private <project>User createTestUser() {
        testUser = new <project>User();
        testUser.setSystemId("testuser");
        testUser.setEmailAddress("testuser@system.com");
        testUser.setFirstName("Test");
        testUser.setLastName("User");
        // save user
        userService.save(testUser);
        return testUser;
    }

    @Test
    public void whenUserIdIsProvided_thenRetrievedNameIsCorrect() {
        mockUser = userService.getUserById("testuser");
        when(userService.getUser("testuser")).thenReturn(testUser);
        assertEquals(testUser, mockUser);
    }
}

On my UserService, I have this:

public UserService(CentralData dataProvider) {
    this.dataProvider = dataProvider;
}

When I save the user, the mocked dataProviderMock logs to the console what I expect it to log. But on the test itself, the mockUser is always null.

I understand the userService does not really accesses the data layer and the database, so mockUser being null is not really wrong. So, how could I perform this test?

I'm pretty sure I'm missing something quite basic here, but can't really see it.

gtludwig
  • 5,411
  • 10
  • 64
  • 90
  • 1
    you want to get the user from database and check against User object? so there's no mocking, no? – Ori Marko May 10 '18 at 10:49
  • 1
    remove MockitoAnnotations.initMocks(CentralData.class); from your setup method. I just wrote an answer for the similar problem https://stackoverflow.com/a/50271406/3295987 – Hemant Patel May 10 '18 at 11:05

0 Answers0