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

使用Spring Boot在spring上下文中模拟bean

淳于熙云
2023-03-14

我使用Spring Boot 1.3.2,我注意到问题,ComponentScan在我的测试类不工作。我想嘲笑一些春豆。Spring引导是否阻止ComponentScan?

测试配置类:

@Configuration
@ComponentScan(value = {"myapp.offer", "myapp.image"})
public class TestEdge2EdgeConfiguration {

    @Bean
    @Primary
    public OfferRepository offerRepository() {
        return mock(OfferRepository.class);
    }

}

测试类:

@ContextConfiguration(classes=TestEdge2EdgeConfiguration.class, loader=AnnotationConfigContextLoader.class)
public class OfferActionsControllerTest extends AbstractTestNGSpringContextTests {

    @Autowired
    private OfferRepository offerRepository;

    @Autowired
    private OfferActionsController offerActionsController;

    @BeforeMethod
    public void setUp(){

        MockitoAnnotations.initMocks(this);
    }


    @Test
    public void saveOffer() {
        //given
        BDDMockito.given(offerRepository.save(any(Offer.class))).willReturn(new Offer());
        //when
        ResponseEntity<Offer> save = offerActionsController.save(new Offer());

        //then
        org.springframework.util.Assert.notNull(save);
    }
}

共有1个答案

皮自明
2023-03-14

这个问题的解决方法

测试配置类,重要的是要排除SpringBootApplication ationConfigation并添加@ComponentScan:

@ComponentScan(basePackages = "com.example", excludeFilters =
    @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,
            value = {SpringBootApplicationConfigutation.class, MyDao.class}
    )
)
@Configuration
public class TestEdge2EdgeConfiguration {

    @Bean
    public OfferRepository offerRepository() {
        return mock(OfferRepository.class);
    }

}

和测试:

    @SpringApplicationConfiguration(classes=TestEdge2EdgeConfiguration.class)
    public class OfferActionsControllerTest extends AbstractTestNGSpringContextTests {

        @Autowired
        private OfferRepository offerRepository;

        @Autowired
        private OfferActionsController offerActionsController;

        @BeforeMethod
        public void resetMock() {
           Mockito.reset(offerRepository);
        }

        @Test
        public void saveOffer() {
            //given
            BDDMockito.given(offerRepository.save(any(Offer.class))).willReturn(new Offer());
            //when
            ResponseEntity<Offer> save = offerActionsController.save(new Offer());        
            //then
            org.springframework.util.Assert.notNull(save);
        }
    }
 类似资料:
  • 我希望创建使用Spring上下文和模拟存储库bean的测试。我使用的是Spring Boot 1.3。2.构建快照JUnit Mockito。 以下是我的测试配置类: 此配置的目的是将OfferPresository从Spring上下文中排除并对其进行模拟,由于此,我将能够编写使用Spring上下文和模拟数据库存储库的测试。 这是我的测试课: 测试和测试配置目录为: 我的应用程序配置和包含Offe

  • 问题内容: 我尝试使用以下代码段设置spring rest模拟的上下文路径: 但是我收到以下错误: 怎么了? 是否可以在代码中的单个位置(例如直接在构建器中)指定contextPath? 这里的控制器 问题答案: 您需要在传递到的路径中包括上下文路径。 在问题中显示的情况下,上下文路径为并且您想向其发出请求,因此您需要传递给:

  • 问题内容: 在SpringMVC应用程序中,有没有一种方法可以使用web.xml加载上下文? 问题答案: Spring可以轻松集成到任何基于Java的Web框架中。你需要做的就是在中声明并使用 设置要加载的上下文文件。 然后,你可以使用WebApplicationContext来获取bean的句柄。

  • 我想不通..出于某种原因,Spring Junit没有将我的bean添加到上下文中。请砰!! 由:org.springframework.beans.factory.nosuchBeanDefinitionException引起:没有类型为“com.api.demo.store.FileStorage”的合格bean可用:需要至少有1个bean作为autowire候选bean。依赖项注释:{@or

  • 我们在Spring boot rest api中有下面的代码片段来获取用户角色。 我们在一个测试课上有这个。 但junit测试用例失败了。请建议如何为安全上下文持有者编写junit测试用例(针对上述代码)。

  • 问题内容: 我不明白为什么无法在此示例中模拟NamedTemporaryFile.name: 测试结果在: 问题答案: 您设置的模拟错误:不是上下文管理器,而是 返回 了一个上下文管理器。将您的设置行替换为: 这样您的测试就可以了。