当前位置: 首页 > 知识库问答 >
问题:

Mockito再放心:mock dao存储库

纪成礼
2023-03-14
@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);
    }

}
    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.getMetabyVersionUuid不返回我的模拟对象,我应该做些什么来使其返回?

spring-mock-mvc:3.3.0spring-boot:2.1.2.发布

谢了!

共有1个答案

解宏扬
2023-03-14

通过将@mock更改为@mockbean来解决。

事实就是如此:

    @MockBean
    MetaVersionDAO metaVersionDAO;

其他一切都与post中的一样,它使用了mocked实例。

 类似资料:
  • 我有这样的配置 在包中,有一个组件需要中的存储库。 这适用于spring数据MongoDB 1.5.2版 如果我升级到任何高于1.6.0.release的版本(我尝试过1.6.2和1.7.0),这将不再有效。这就好像mongo存储库扫描不工作,我得到了错误: 有什么想法吗? 更新:如果我使用MongoRepository而不是PagingAndSortingRepository,它可以工作: 这不

  • 我想知道,当我们为客户提供新的更新时,是否有丢失这些文件的风险。如果有更好的解决方案,上传文件和获取文件链接之后,与.NET core请告诉我:)

  • java java 在TaskServiceImpl.java.FindAll(pageRequest)中返回NULL。我不太熟悉Mockito,想知道用它创建模拟存储库是否会导致问题?当我这样做时,它工作得很好。findall()没有分页。我使用PagingAndSortingRepository中的findAll(Pageable)方法有问题吗?谢了!

  • 我知道什么是放心,它的用途是什么,cucumber也是如此。 但问题是我们可以用“放心”实现的,我们也可以用cucumber进行测试。 Rest保证只是调用Web服务并验证响应。我们不能在Maven构建期间使用Rest保证,因为该服务需要启动并运行。 但是使用Cucumber,我可以直接调用Web服务的业务服务层和DOA层并验证响应。cucumber可以在 Maven 构建时调用它。 所以问题是哪

  • 我试图覆盖我的整个测试环境与Mockito.spy功能,所以每当我想我可以存根一个方法,但所有其他调用去默认功能。这在服务层运行得很好,但是我在存储库层有问题。 我的设置如下: Mockito-2.15.0 Spring-5.0.8 SpringBoot-2.0.4 存储库: 服务: spy的配置: 还有我的测试课: 现在,该测试有三种可能的结果: > aRepository是间谍(这就是我想要的

  • 我有一个问题与存根我的存储库。有人建议我只创建另一个application.properties(我没有这样做),并使用像H2这样的内存数据库。不过,我想知道我是否可以只是存根调用,这样当调用MyDataService.FindById(id)而不是试图从数据库中获取它时,就可以返回一个模拟对象?