Невозможно установить правильное ожидание в Junit.Столкновение с mockit.internal. Неожиданный призыв - PullRequest
0 голосов
/ 01 октября 2018

Ниже приведен мой метод тестирования.

        @Test
            public void testSaveUserPreference() throws Exception {
                final long userId = 1L;
                final String category = "category";
                final UserPreference userPreference = createMockedUserPreference(userId, category);
                final UserPreferenceDTO userPreferenceDTO = createMockedUserPreferenceDTO(userId, category);
                final Date lastAccessed = userPreference.getLastAccessedDate();
                userPreferenceDTO.setLastAccessedDate(lastAccessed);
                //override the convert method to control the object being "saved"
                final UserPreference document = new UserPreference();
                new MockUp<UserPreferenceUtils>() {
                    @Mock
                    UserPreference convertFromDTO(UserPreferenceDTO dto) {
                        document.setUserId(userPreference.getUserId());
                        document.setCategory(userPreference.getCategory());
                        document.setProperties(userPreference.getProperties());
                        return document;
                    }
                };

                new Expectations() {{
                    component.getUserPreference(userId, category);
                    returns(userPreference);

                    component.saveUserPreference(userPreference);
                    returns(userPreference);
                }};

                UserPreferenceDTO actual = service.savePreference(userPreferenceDTO);
                assertNotNull(actual);
                assertEquals(userPreference.getUserId(), actual.getUserId());
                assertEquals(userPreference.getCategory(), actual.getCategory());
                assertEquals(userPreference.getProperties(), actual.getProperties());
                assertNotNull(actual.getCreatedDate());
                assertTrue(lastAccessed.before(actual.getLastAccessedDate()));
            }

Ниже приведен метод обслуживания, в котором я сталкиваюсь с ошибкой.

            @Transactional
                public UserPreferenceDTO savePreference(UserPreferenceDTO userPreference) {
                    UserPreference preference = UserPreferenceUtils.convertFromDTO(userPreference);
                    UserPreference existingPreference = userPreferenceComponent.getUserPreference(userPreference.getUserId(), userPreference.getCategory());
                    if(existingPreference!=null && !CollectionUtils.isEmpty(existingPreference.getProperties())) {
                        Map<String,Object> report = (Map<String, Object>) preference.getProperties().get("favoriteFilters");
                        Map<String,Object> existingRep = (Map<String, Object>) existingPreference.getProperties().get("favoriteFilters");
                        existingRep.putAll(report);
                        existingPreference.getProperties().put("favoriteFilters",existingRep);
                    } else {
                        existingPreference = preference;
                    }
                    if (existingPreference.getCreatedDate() == null) {
                        existingPreference.setCreatedDate(new Date());
                    }
                    existingPreference.setLastAccessedDate(new Date());
                    UserPreferenceDTO savedPreference = UserPreferenceUtils.convertFromDocument(userPreferenceComponent.saveUserPreference(existingPreference));
                    return savedPreference;
                }

При вызове метода сохранения во второй последней строке, он дает эту ошибку.

mockit.internal.UnexpectedInvocation: Parameter "userPreference" of com.curaspan.platformsupportservice.components.preference.UserPreferenceComponent#saveUserPreference(com.curaspan.platformsupportservice.mongo.document.UserPreference userPreference) expected com.curaspan.platformsupportservice.mongo.document.UserPreference@3d3fcdb0, got com.curaspan.platformsupportservice.mongo.document.UserPreference@636be97c

Объект userPreference в Expectation и фактическом методе не совпадает, хотя у меня все параметры одинаковы.Я что-то упускаю? 1010 *

...