我使用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);
}
}
这个问题的解决方法
测试配置类,重要的是要排除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: 测试结果在: 问题答案: 您设置的模拟错误:不是上下文管理器,而是 返回 了一个上下文管理器。将您的设置行替换为: 这样您的测试就可以了。