Java 使用Mockito重新启动:mockdao存储库

Java 使用Mockito重新启动:mockdao存储库,java,spring,unit-testing,mocking,rest-assured,Java,Spring,Unit Testing,Mocking,Rest Assured,我试图使用restasured模拟控制器中的一些服务/存储库来测试我的REST端点 这是我的测试课: @RunWith(SpringJUnit4ClassRunner.class) @Transactional @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = {VedicaConfig.class}) @AutoConfigureMockMvc @ActiveProfile

我试图使用
restasured
模拟控制器中的一些服务/存储库来测试我的REST端点

这是我的测试课:

@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;
    }
如您所见,我尝试在
@Test
方法的顶部模拟
metaVersionDAO
,因此我希望它在设置时返回
new DocVersion()
,但在这个DAO中,实际的代码被调用,并且在entityManager上失败,该值为null

我的问题是为什么
metaVersionDAO.getmetabyversionuid
不返回我的模拟对象,我应该怎么做才能使其返回

spring模拟mvc:3.3.0 弹簧靴:2.1.2.1释放


谢谢

通过更改
@MockBean
@Mock
解决

因此:

    @MockBean
    MetaVersionDAO metaVersionDAO;

其他所有内容都与文章中相同,并且它使用模拟实例。

尝试按如下方式注释dao:
@MockBean-MetaVersionDAO-MetaVersionDAO
,删除
@injectmock
注释,并在
@Before
方法中,创建
DocCtrl
实例并在构造函数中传递
metaVersionDAO
(假设您使用的是构造函数注入)。