Restasured with Mockito: репозиторий mock dao - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь протестировать мои конечные точки REST, используя RestAssured, с проверкой некоторых сервисов / репозиториев в контроллере.

это мой тестовый класс:

@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = {VedicaConfig.class})
@AutoConfigureMockMvc
@ActiveProfiles("test")
public class RESTTest {
@LocalServerPort
    private int port;

    @Autowired
    private MockMvc mvc;

    @Mock
    MetaVersionDAO metaVersionDAO;

    @InjectMocks
    DocCtrl docCtrl;

    @Before
    public void contextLoads() {
        RestAssured.port = port;
        assertThat(mvc).isNotNull();

        // this must be called for the @Mock annotations above to be processed.
        MockitoAnnotations.initMocks(this);
        RestAssuredMockMvc.standaloneSetup(MockMvcBuilders.standaloneSetup(docCtrl));
    }

    @Test
    public void shouldGetThumbnail() {
        String ver = "1.0";
        String uuid = "124-wqer-365-asdf";
        when(metaVersionDAO.getMetaByVersionUUID(ver, uuid)).thenReturn(new DocVersion());

        given()
                .when()
                .param("uuid", uuid)
                .param("versionVed", ver)
                .get(CTX_BASE + "/thumbnail")
                .then()
                .log().ifValidationFails()
                .statusCode(OK.value())
                .contentType(ContentType.BINARY);
    }

}

теперь, сама конечная точка REST корректно получает заданные параметры. эта конечная точка имеет DocCtrl инъекцию, которая по очереди использует metaVersionDAO экземпляр:

    public RawDocument getDocThumbnail(String uuid, String versionVed) throws Exception {
        DocVersion docVersion = metaVersionDAO.getMetaByVersionUUID(versionVed, uuid);
        InputStream inputStream = okmWebSrv.getOkmService().getContentByVersion(uuid, versionVed);
        String dataType = docVersion.getMetadata().getAdditionals().get(Vedantas.CONTENT_TYPE);
        ByteArrayInputStream bais = new ByteArrayInputStream(createPDFThumbnail(dataType, inputStream));

        RawDocument rawDocument = new RawDocument(bais, "qwer");
        return rawDocument;
    }

Как вы можете видеть, я пытался смоделировать metaVersionDAO в верхней части @Test метода, поэтому я ожидал, что он вернет new DocVersion(), как я его установил, но в этом DAO вызывается реальный код и он не работает на entityManager, который является нулевым.

У меня вопрос, почему metaVersionDAO.getMetaByVersionUUID не возвращает мой смоделированный объект и что я должен сделать, чтобы сделать его таким?

spring-mock-mvc: 3.3.0 Пружинная загрузка: 2.1.2. ВЫПУСК

Спасибо!

1 Ответ

0 голосов
/ 17 мая 2019

решается путем изменения @Mock на @MockBean.

так оно и есть:

    @MockBean
    MetaVersionDAO metaVersionDAO;

все остальное остается тем же, что и в посте, и использует макетированный экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...