Mockito Test не вызывает метод verify () - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь настроить модульные тесты для приложения, использующего Mockito и JUnit.Данное приложение просто работает с методами CRUD в базе данных SQL.Методы связаны от уровня DAO к клиентскому уровню обслуживания через уровень менеджера.На этом уровне менеджера я пытаюсь сфокусировать свои тесты.

На данный момент я только сделал тест для метода create, и он возвращает следующую ошибку:

Wanted but not invoked:
dao.createEntry(profile);
-> at com.example.tests.ManagerCRUDTests.testProfileCreate(ManagerCRUDTests.java:60)
Actually, there were zero interactions with this mock.

Мой код выглядит следующим образом:

public class ManagerCRUDTests {

    private final Logger logger = LoggerFactory.getLogger(ManagerCRUDTests.class.getName());

    @Mock
    private CrudDAO<Profiles> dao;

    @Mock
    private ProfileManagerImpl manager;

    @Mock
    Profile profile = new Profile();

    public Profile setProfile() {
        profile.setId(1);
        profile.setName("test");
        return profile;
    }

    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);

    }

    @Test
    public void testProfileCreate() throws Exception {
        setProfile();
        logger.info("Testing create for Manager");
        logger.info("Parameters: {}", profile);
        manager.createEntry(profile);
        verify(dao).createEntry(ArgumentMatchers.eq(profile));  //this is where it is failing
        logger.info("Test passed");
    }

}

Я впервые работаю с юнит-тестами;до этого я только делал интеграционные тесты.Я делаю что-то не так, когда пишу свой метод проверки или издеваюсь над объектами.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Исправьте ваш менеджер, чтобы сделать его объектом тестирования (не поддельным), поэтому для его исправления я предлагаю:

и нет необходимости делать initMocks в настройке, если вы используете аннотацию

@Mock
private CrudDAO<Profiles> dao;

@InjectMocks
private ProfileManagerImpl managerUnderTest;

@Mock
Profile profile = new Profile();

public Profile setProfile() {
    profile.setId(1);
    profile.setName("test");
    return profile;
}

@Test
public void testProfileCreate() throws Exception {
    setProfile();
    logger.info("Testing create for Manager");
    logger.info("Parameters: {}", profile);
    managerUnderTest.createEntry(profile);
    verify(dao).createEntry(ArgumentMatchers.eq(profile));  
    logger.info("Test passed");
}
0 голосов
/ 14 декабря 2018

manager определяется как @Mock.Таким образом, он не будет использовать ни одну из своих зависимостей.Обычным подходом было бы иметь manager как @InjectMocks.Это создаст экземпляр со всеми зависимостями, замененными / установленными как @Mock

...